我在我的頁面上有一個按鈕,每按一次就逐行添加一個按鈕。 我使用此代碼:jQuery多處理程序註冊問題
$('#addCnt').live('click', function() { .. };
問題是當我與該代碼一起重新加載該頁面的一部分,它再次註冊的處理程序,因此,當按鈕被它附加N個行,其中N後點擊=總頁面重新載入次數。
我該如何預防?
我在我的頁面上有一個按鈕,每按一次就逐行添加一個按鈕。 我使用此代碼:jQuery多處理程序註冊問題
$('#addCnt').live('click', function() { .. };
問題是當我與該代碼一起重新加載該頁面的一部分,它再次註冊的處理程序,因此,當按鈕被它附加N個行,其中N後點擊=總頁面重新載入次數。
我該如何預防?
在給定的頁面中,您需要確保附加事件處理程序的代碼永遠不會運行多次。所以這個代碼:
$('#addCnt').live('click', function() { .. };
不應該運行多次。
如果你不能重組你的代碼,以防止這種被運行一次以上,那麼你可以創建自己的全球標誌保護它:
if (typeof window.addCntProtection == "undefined") {
window.addCntProtection = false;
}
if (!window.addCntProtection) {
$('#addCnt').live('click', function() { .. };
window.addCntProtection = true;
}
順便說一句,jQuery的已否決使用.live()
並且不再推薦用於任何版本的jQuery。他們建議您爲早期版本的jQuery使用jQuery 1.7+或.delegate()
的.on()
。
如果您在選擇器上使用live
,則必須僅附加一次,它可以在頁面上的任意數量的元素上工作。
移動你的代碼來附加live
處理程序在代碼之外重新加載頁面的一部分,它應該工作正常。
從jQuery 1.7開始,the .live()
method is deprecated。使用.on()
附加事件處理程序。
刪除事件處理程序,然後用.off()
刷新頁面。 例子:
$('#addCnt').on('click',function(){
alert('Clicked.');
});
$('#a').on('click',function(){
$('#addCnt').on('click',function(){
alert('Clicked.');
});
});
$('#r').on('click',function(){
$('#addCnt').off('click');
});
,只要你想你可以添加儘可能多的處理程序。 .off()
刪除全部其中。看看jsfiddle!
謝謝,請牢記這一點! – dakt 2012-02-27 19:59:35
你可以顯示你的標記我們可以看到這個按鈕在哪裏。是否有按鈕排? – 2012-02-27 19:27:18
你如何重新加載頁面的一部分? – Ryan 2012-02-27 19:27:32
嗯......阿賈克斯!? :) – dakt 2012-02-27 19:35:12