2012-08-12 63 views
0

我在網站上有一個錨點。當有人點擊它時,我會在jQuery中修改並更改名稱,但當它再次單擊時,儘管我更改了名稱,但事件仍會被解除。 代碼在這裏:點擊不會觸發選擇器更改後

$(".like_cont a[name=like]").click(function (e) { 
       alert("W"); 
       var t = $(this); 

       t.find("img").attr("src", "images/like_icon.png"); 

       var ls = parseInt(t.next().next()) + 1; 
       t.next().next().text(ls); 

       var params = "Like|" + t.attr("lik"); 
       CallServer(params, ""); 

       t.attr("name", "liked"); 
       e.preventDefault(); 
      }); 

後點擊name喜歡但另一個click事件火災。如何更改選擇器以保留開火?

回答

1

一種可能的方法是致電.off()從對象中刪除點擊事件。

1

根據Iridio的回答,您可以撥打.off()來移除事件處理程序。

或者你可以使用一個委託事件處理模型:

$(".like_cont").on("click", "a[name=like]", function (e) { 
    ... 
}); 

這依賴於一個事實,即點擊(和大多數其他)事件冒泡從通過其含有的所有元素源元素。因此,使用綁定了.on()這種語法的處理程序時,無論何時(在此示例中)發生點擊(在此示例中)".like_cont"元素,jQuery都會測試事件的源元素以查看它是否與第二個參數"a[name=like]"中的選擇器匹配 - 如果它那麼函數被調用,否則它不是。

換句話說,與一個委託處理模型的功能將被調用只有當點擊的元素在該事件發生時時在第二個參數選擇器相匹配。

.click()束縛,或結合有.on()而不一個「標準」處理程序,第二個參數,該事件被直接綁定到在事件被綁定的時間相匹配的選擇器元件(S) - 無論這些元素在事件發生時是否仍與該選擇器匹配。 (不是說這是一件壞事 - 有時它正是你需要的東西,而不是你目前的情況。)

+0

感謝你的好回答 – levi 2012-08-13 07:21:07