2012-02-27 124 views
1

我在我的頁面上有一個按鈕,每按一次就逐行添加一個按鈕。 我使用此代碼:jQuery多處理程序註冊問題

$('#addCnt').live('click', function() { .. }; 

問題是當我與該代碼一起重新加載該頁面的一部分,它再次註冊的處理程序,因此,當按鈕被它附加N個行,其中N後點擊=總頁面重新載入次數。

我該如何預防?

+0

你可以顯示你的標記我們可以看到這個按鈕在哪裏。是否有按鈕排? – 2012-02-27 19:27:18

+0

你如何重新加載頁面的一部分? – Ryan 2012-02-27 19:27:32

+0

嗯......阿賈克斯!? :) – dakt 2012-02-27 19:35:12

回答

1

在給定的頁面中,您需要確保附加事件處理程序的代碼永遠不會運行多次。所以這個代碼:

$('#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()

+0

好的,謝謝...我會嘗試你的方法,因爲代碼重組是不可能的。 – dakt 2012-02-27 19:38:25

+0

再一次,謝謝你......非常棒!呃...我不能投票。 – dakt 2012-02-27 19:49:13

+0

@dakt - 在適當的時間過後,您可以通過單擊箭頭下方的複選標記來選擇您認爲是最佳答案的答案。這也會給你更多的折扣。 – jfriend00 2012-02-27 19:52:35

0

如果您在選擇器上使用live,則必須僅附加一次,它可以在頁面上的任意數量的元素上工作。

移動你的代碼來附加live處理程序在代碼之外重新加載頁面的一部分,它應該工作正常。

0

從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'); 
}); 

http://jsfiddle.net/WccQy/

,只要你想你可以添加儘可能多的處理程序。 .off()刪除全部其中。看看jsfiddle!

+0

謝謝,請牢記這一點! – dakt 2012-02-27 19:59:35