2012-09-18 73 views
0

當我在動態頁面中使用jquery live函數(通過Ajax顯示頁面)時,用live檢測到的按鈕事件被複制。而且,每次訪問包含這些按鈕的頁面時,一次點擊都會導致函數執行多次。Jquery Live,多次執行功能

我該如何解決這個問題? 謝謝你!

+1

你必須向我們出示相關的HTML/JavaScript來我們知道如何幫助你。 – jfriend00

+0

這很大程度上取決於你如何精確地附加這些事件(也許事件附加到幾個元素和處理程序在事件冒起來時被調用),HTML的外觀(是否有任何內聯事件處理程序?)以及您的處理程序看起來像(例如,如果您正在重複或重新添加事件)。換句話說:向我們展示您的代碼。 – Tadeck

回答

1

這意味着您已附上相同的處理相同的事件多次。

沒有代碼它不可能提供進一步的幫助,但現在我敢肯定,你知道如何修復它自己:-)

+1

+1實際上是正確的。請參閱[我的評論](http://stackoverflow.com/questions/12471998/jquery-live-many-times-function-execution#comment16778362_12471998),但你已明確表示。處理程序可以附加,例如。當沒有代碼可以防止冒泡並且它們沿着頂部的方向的時候到其他元素,但它仍然是附加到相同事件的相同處理程序。 – Tadeck

0

我建議你使用.on().off().live()已經過時,表現出了很大問題

http://api.jquery.com/on/

http://api.jquery.com/off/

http://api.jquery.com/live/

你可以做什麼有設置.off()結合.on()元素前,所以我們可以保證所有以前的事件處理程序刪除。

因爲你不提供任何代碼,我只猜到了是你的問題。

我想在每一個Ajax響應的DOM與再次調用.live()聽新注入的DOM事件的代碼更改。現在從我之前說的.on().off()都已經來了。打電話.off()以確保.on()

+0

函數'on'像函數bind一樣工作,但它不適用於動態頁面。第一次加載頁面沒關係。 我有一張桌子,每行有一些按鈕。爲此表執行分頁。 對於表的第一頁,使用'bind'的動作是可以的,因爲下一頁'bind'不檢測動作。 'Live'函數適用於所有表格頁面,但是如果我多次載入表格,每次'live'函數檢測到的動作都會被複制。 我試着'返回false'和'event.stopImediatePropagation()'來停止事件的迭代,但這不起作用。 –

+0

嗯,這裏的訣竅是在每次DOM更改(您說的動態頁面)中每次調用'.off()'和'.on()'。創建'.off()'和'.on()'來代替'.live()' –

0

,所有現有的事件處理程序被刪除,然後重新創建所有的事件監聽器你可能(非故意的)重新綁定在相同的元素的live()事件多次(例如,結合現場活動代碼重複幾次)。嘗試使用one();這將只綁定一次,並且如果完全相同的事件已經綁定到元素,將不會重新綁定。

用法示例:

$("#foo").one("click", function() { 
    //event on click, bind this just once, even if this block of code is repeated 
}); 

說你綁定使用one()的鏈接點擊的事件,它只會執行(和保持進行)每次點擊的動作,但阻止其發射XXX每次點擊次數(xxx是綁定次數)。