質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

588閲覧

ajaxで作成したボタンに処理入れたい

amaguri

総合スコア227

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/08/09 06:37

ajax作成したボタンに処理を加えたいのですが上手くいきません、

やりたい動きとしては
ajaxで
img画像表示タグ
deleteボタンを作成し
deleteボタンが押された時に
そのidを持つimg画像表示タグを削除する。

現在のコード

html

1<div class="container clearfix"> 2 <div class="row"> 3 <div id='message' style='display:none;'> 4 フォーム入力ありがとうございました。 5 </div> 6 <div class="col-md-12"> 7 <p>画像ファイルを選択してください(複数可)</p> 8 </div> 9 </div> 10 <div class="row"> 11 <div class="col-xs-2"> 12 <span class="fileUpload btn btn-default"> 13 ファイルを選択 14 <input type="file" class="uploadFile" accept="image/*" multiple/> 15 </span> 16 17 </div> 18 <div class="col-xs-4" id="progress-container"></div> 19 </div> 20 <br /> 21 <div class="row"> 22 <div class="col-md-12" id="image-files"> 23 <ul class="list-inline list-unstyled"></ul> 24 <div class="body"></div> 25 </div> 26 </div> 27 <tr> 28 <th colspan="2" class="btn_th"><input type="submit" class="submit" id="submitBtn" value="投稿"/></th> 29 </tr> 30 </div>

js

1 var progressTemplate = "<div class=\"list-group-item\"><div class=\"progress progress-striped active\"><div class=\"progress-bar progress-bar-info\" style=\"width: 0%;\"></div></div></div>"; 2 3 $(function(){ 4 var def = $.Deferred(); 5 var promise = def; 6 $('#submitBtn').attr('disabled', 'disabled'); 7 8 $(".uploadFile").change(function() { 9 10 // ファイル分タスクを作成 11 $.each(this.files, function(i, file){ 12 promise = promise.pipe(function(response){ 13 14 var newPromise = $.Deferred(); 15 16 var formData = new FormData(); 17 formData.enctype = "multipart/form-data"; 18 formData.append("file", file); 19 $("#progress-container").append(progressTemplate); 20 $.ajax({ 21 url: "/ninnin/hogehoge/add", 22 type: 'POST', 23 dataType: 'text', 24 data: formData, 25 cache: false, 26 contentType: false, 27 processData: false, 28 xhr: function() { 29 var xhr = $.ajaxSettings.xhr(); 30 if (xhr.upload) { 31 $('#submitBtn').attr('disabled', 'disabled'); 32 xhr.upload.addEventListener('progress', function(evt) { 33 var percent = (evt.loaded / evt.total) * 100; 34 $("#progress-container").find(".progress-bar").width(percent + "%"); 35 36 }, false); 37 } 38 return xhr; 39 }, 40 success: function(imageData, status, xhr) { 41 var res = {}; 42 try { 43 res = $.parseJSON(xhr.responseText); 44 }catch (e) {} 45 $("#image-files ul").append("<img class='imgView' src=\"" + res.img + "\" / >"); 46 $('<input>').attr({ 47 type: 'textarea', 48 name: "body["+res.img_id+"]", 49 value: res.img_id, 50 }).appendTo("#image-files div"); 51 $('<input>').attr({ 52 id:"deleteBtn", 53 type: "submit", 54 name: "delete["+res.img_id+"]", 55 value: res.img_id+"削除", 56 }).appendTo("#image-files div"); 57 }, 58 error: function(xhr, textStatus, errorThrown) { 59 var res = {}; 60 try { 61 res = $.parseJSON(xhr.responseText); 62 } catch (e) {} 63 alert(res.errorMessage); 64 }, 65 complete: function() { 66 $("#progress-container").children().remove(); 67 newPromise.resolve(); 68 $('#submitBtn').removeAttr('disabled'); 69 } 70 }); 71 return newPromise; 72 }); 73 }); 74 def.resolve(); 75 }); 76 77 $('#submitBtn').on('click', function(evt) { 78 var form = $('#form1').get()[0]; 79 80 // FormData オブジェクトを作成 81 var formData = new FormData( form ); 82 83 // Ajaxで送信 84 $.ajax({ 85 url: "/ninnin/hogehoge/post", 86 type: 'POST', 87 dataType: 'text', 88 data: formData, 89 cache: false, 90 contentType: false, 91 processData: false, 92 success: function(data, status, xhr) { 93 //alert("成功"); 94 $("#message").fadeIn(300).delay(1000).fadeOut(300); 95 $('#form1')[0].reset(); 96 $("#image-files ul img").remove(); 97 $("#image-files div input").remove(); 98 $('#submitBtn').attr('disabled', 'disabled'); 99 } 100 }); 101 return false; 102 }); 103 104$('#deleteBtn').on('click', function(evt) { 105 alert("テスト") 106 }); 107 108 109 });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

既に回答が寄せられてある程度目的は達成しているようですが、回答のコードがなぜ動くかを解説した書籍があり、Google Booksで公開されていますので、参考までにご紹介します。

JavaScript逆引きレシピ jQuery対応 - 196 ページ - Google ブック検索結果

投稿2017/08/15 15:52

s-show

総合スコア203

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaguri

2017/08/16 01:18

ご丁寧にありがとうございます!
guest

0

ベストアンサー

これでどうでしょう。

JavaScript

1$('body').on('click', '#deleteBtn', function(evt) {

投稿2017/08/09 06:42

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaguri

2017/08/09 07:16

回答ありがとうございます。 何とかアラートを出すところまでいけました。 あとは削除するコードを実装してみたいと思います。 idを振り当てて削除する方法でいい方法はありませんでしょうか?
kei344

2017/08/09 07:33

よく読んでいませんが、res.img_idをdata-*属性に入れておいて識別すれば削除ボタンと画像の対応は取れると思います。 複数削除ボタンがあるなら「deleteBtn」はidでなくclassのほうが良いですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問