1
  $("#btnAdd").click(function () {
    $.ajax({
      type: "POST",
      url: "View.aspx/AddResponsibility",
      data: '{"ClientCode":"' + $("#hfClientCode").val() + '","ResponsibilityCode":"' + $("#txtResponsibility").val() + '"}',
      async: true,
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function (msg) {
        $('#tblRespon > tbody:last').append("<tr><td>" + $("#txtResponsibility").val() + "</td><td>" + $("#txtFullName").val() + "</td><td><a class='delete' id='btnDelete' name='btnDelete' value='" + $("#txtResponsibility").val() + "'>" + "Delete" + "</a></td></tr>");
      },
      error: function (msg) {
        alert(msg.d);
      }
    });
  });

追加する新しい要素である「<a>」にクラスを追加する必要があります。私が上で試みた方法は、関数として機能していないようです

$(".delete").click(function () {

通常、ページにすでに含まれている要素の場合のように起動しません。

4

3 に答える 3

2

これは、後でDOMに挿入するアンカータグが原因です。つまり、クリック機能をバインドした場所はどこでも、新しく挿入された要素には影響しません。

解決策は、でjQueryを使用することです。on現在および未来の要素に対して機能します。

これを変える

$(".delete").click(function () {
   //some code here
})

$(document).on("click",".delete",function () {
  //some code here
})

on1.7以降のバージョンから利用できます。以前のバージョンを使用している場合は、live()の使用を検討してください

于 2012-07-26T16:20:52.917 に答える
1

次のような.on()関数を使用する必要があります。

$("#tblRespon").on("click",".delete",function(){
于 2012-07-26T16:20:44.100 に答える
0

私が正しければ、追加された要素に削除ハンドラーを再署名する必要があります。

success: function (msg) {
        $('#tblRespon > tbody:last').append("<tr><td>" + $("#txtResponsibility").val() + "</td><td>" + $("#txtFullName").val() + "</td><td><a class='delete' id='btnDelete' name='btnDelete' value='" + $("#txtResponsibility").val() + "'>" + "Delete" + "</a></td></tr>");

        $('.delete').click(function(){
           //your code
        })

},

より良い方法があることは知っていますが、要素を追加するたびに、それらの追加された要素のハンドラーを登録する必要があることを知っておく必要があります

于 2012-07-26T16:23:44.907 に答える