2012-02-23 57 views
1

我在旋轉木馬內部有一個項目,並綁定了.click()事件綁定到它。它的工作效果非常好,因爲該項目位於旋轉木馬的第一頁,並且在加載時可見。jQuery .click()在旋轉木馬內的項目上

但是,如果我移動旋轉木馬以使其變得不可見,然後移回視口中,click()事件不再起作用了?

我可能只是不得不以某種方式再次註冊時,它是可見的?

BTW單擊用於打開一個模式jQuery UI的對話框

感謝

+0

我們如何幫助您找到我們看不到的代碼中的錯誤?在您的問題中發佈代碼和/或創建一個[jsfiddle](http://www..jsfiddle.net) – 2012-02-23 09:29:50

+0

http://www.elveneleven.com/WhyGo/ 對不起,我認爲這可能只是一個「重新註冊正在移動的傳送帶上的點擊事件」或類似的一般性建議會很好......雖然確切的代碼也會很酷;) – Zoran 2012-02-23 11:21:16

+0

您是否在談論點擊時打開的對話框「快速報價」?無論我做什麼都適合我(參加巡迴演出,與手風琴一起演奏......) – 2012-02-23 13:10:23

回答

0

跟着你評論,我發現確實是點擊不工作了,當你通過傳送帶循環。

我不知道這個插件是如何工作的。我想它可能會重新創建元素,並且事件處理程序會以某種方式丟失。

解決此問題的方法是使用事件委派。
基本上你將委託點擊的執行上.quickQoute到一個容器,你的情況傳送帶元素#inner

$('#inner').on('click', '.quickQoute', function() { 
    $("#quickQoute").dialog({ closeText: ' ' }); 
    $("#quickQoute").dialog("open"); 
    return false; 
}); 

更多關於事件代表團.on()

+0

這真是太棒了!我喜歡每天學習新事物。優雅,解釋性和實用性。很棒的工作,謝謝你! – Zoran 2012-02-23 15:27:58

0

我建議使用liveQuery plugin

這會在創建元素時自動將事件綁定到元素。例如:

$(".some_appearing_button").livequery('click',function() { 

     alert("You clicked me!"); 
}); 

這使您可以先設置事件處理程序,並且必須有在以後的時間創建的元素,就像你的旋轉木馬做的選項。

+0

livequery是絕對不相關了:jQuery實現*本機*事件委託自1.3 ... – 2012-02-23 14:50:49

+0

livequery是一個完全不同的概念從.live(),如果這就是你的意思。否則,請詳細說明:) – Flater 2012-02-23 16:13:47

+0

迪迪埃,我得到它的綁定到一個點擊事件可以改變爲委託/功能,但有一些事情,這些功能仍然不能做。例如,在我創建的應用程序中,我將'datepicker'類添加到需要atepicker的文本框中。 Livequery在此類上觸發,並自動清理文本框輸入。我無法使用on/delegate工作,因爲這些工作與事件一起工作,但沒有「item_is_created」事件。因此,livequery。在這些情況下它仍然有很好的用途。 – Flater 2012-02-23 16:22:11