2016-07-29 5 views
0

私はユーザーの投稿を返すページを持っています。これらの投稿は新しいコメントが投稿された後にjqueryコードを使ってオンザフライでコメントできます。投稿の下の新しいコメントとDeleteボタン。問題は、ページをリロードしない限り、新しく挿入された要素でDeleteボタンが機能しないことです。ソリューションが.on()メソッドを使用していると読んでいますが、これを実装する方法は少し混乱しています。私はここに、どのように変更する必要があるかを理解していない.on()を使用してjqueryを使用してページ上の動的挿入ボタンにイベントをアタッチする

$(document).ready(function() { 

    $("button[id*='deletecmnt_']").click(function() { 

     var id = this.id.replace('deletecmnt_', ''); 

     var comment_card_id = ('#comment_' + id); 

     var token = $(this).data('token'); 

     $.ajax({ 
      url: '../comment/' + id, 
      type: 'post', 
      data: {_method: 'delete', _token: token}, 
      success: function() { 


       // Checks for display of comment card and removes it 
       if ($(comment_card_id).is(":visible")) { 

        $(comment_card_id).fadeOut("fast"); 

       } 
      } 
     }) 

    }) 

}); 

: は私が新たに挿入されたコメントでポスト部分を更新し、このコメントを削除機能である一つの機能を持っています。

+0

コードを最小限に減らすことは可能です。 – jonathanGB

+0

をお待ちしています。私はお試しになります。 – Chriz74

+0

コードの特定の点が呼び出されていないかどうかを確認するために、 'console.log(" "と呼ばれる)をキーポイントに配置することもお勧めします。問題を見つけるのは非常に便利です。 – jonathanGB

答えて

2

動的に追加された要素のイベント委譲を使用する必要があります。 .on()メソッドでは、ハンドラを作成した後にそのセレクタを追加する必要があります。

$(document).ready(function(){ 

    $("body").on("click", "button[id*='deletecmnt_']", function() { 
    // codes 
    } 
}); 

これは、セレクタに一致するまだ作成されていない要素のクリックを待ち受けます。詳細はJQuery APIのドキュメントページをご覧ください:http://api.jquery.com/on/

+0

私のコードの$(document).ready(function()部分はどうなりますか?それを削除する必要はありますか? – Chriz74

+0

いいえ、そのままにしておいてください。 – Cruiser

+0

'$(document).ready(...)'が必要です。そうでないと、 'body'や** DOM **の他の要素のハンドラは存在しません – jonathanGB

関連する問題