2012-07-26 141 views
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() { 

不火,因爲它與已經包含在頁面上的元素通常不會。

+0

我認爲您認爲最後一行會導致所有刪除類的元素髮生單擊事件。這不是真的。它選擇具有類刪除的所有元素,然後添加單擊事件。所以,這是你放置的地方。由於新元素處於異步循環中,所以應該使用事件綁定器。 – Jeroen 2012-07-26 16:23:14

回答

1

您需要使用.on()功能如下:

$("#tblRespon").on("click",".delete",function(){ 
+0

感謝您的確切答覆。 – AzaRoth91 2012-07-26 16:45:18

2

這是因爲錨標記您稍後注入到DOM。這意味着無論你綁定了點擊功能,它都不會對新注入的元素產生任何影響。

解決方案是使用jQuery onon將適用於當前和futere元素。

更改此

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

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

on可從1.7+版本。如果您使用的是較早的版本,可以考慮使用live()

+0

感謝您的回答和解釋 – AzaRoth91 2012-07-26 16:45:42

0

如果我是正確的,你需要reasign的刪除處理程序的添加元素:

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 
     }) 

}, 

我知道有更好的方法,但只需要知道,每次添加元素時,都應該爲這些添加的元素註冊處理程序