我有類似:
function init(){
$('.btn').click(function(){
//do something;
}
}
而且當有新的內容通過AJAX加入,我打電話init()
,讓點擊事件應用於新的按鈕。但是當我點擊一次時,它會捕獲多次點擊(與我稱爲init()
的次數一樣多)。它是有道理的,但如何避免它?
的jsfiddle鏈接:http://jsfiddle.net/s2ZAz/8/
解決方案:
*使用$ .delegate() - http://api.jquery.com/delegate/
*使用$ .live() - http://api.jquery.com/live/
不太優選,不過,解決方案:
*使用$ .off() - http://api.jquery.com/off/或$ .unbind() - http://api.jquery.com/unbind/
Upvoted,但它可能是值得一提的代表通常是優選的假設一些含元素已知始終存在。實時方法,它只是在文檔上調用委託,可能相當矯枉過正。 –
@kennis:你是對的,編輯過。 –
這並不能改善.live(),因爲你仍然在委託給文檔。您應該委託給最近的包含所有可點擊節點的祖先,並且不會被銷燬。 –