2012-01-18 61 views
6

我正在使用所有庫的最新版本(jQuery 1.7.1和jQuery UI 1.8.16),但是我綁定了一個.live 'click')事件即使在按鈕被禁用時仍然會觸發。當我將常規的.click()事件綁定到它時,它不會觸發。jQuery .live('click')即使在禁用的按鈕上也會觸發

有什麼建議嗎?我正在考慮使用.live()不當或這是jQuery UI中的錯誤。

這裏是一個JSFiddle來演示。 http://jsfiddle.net/Kb66j/1/

謝謝! Alex

+0

您的代碼似乎在Firefox中運行良好,但在Chrome和Safari中造成問題。 [這是前段時間報告的bug](http://bugs.jquery.com/ticket/8165),不確定其狀態。 – 2012-01-18 18:35:17

回答

2

從版本1.7開始,.live() has been deprecated

「在jQuery 1.7的,所述.live()方法被棄用。使用.on()到 附着事件處理程序」。

另外,如1.7版本,.on()優於.bind()

「在jQuery 1.7中,。對()方法是用於 事件處理程序安裝到一個文件的優選方法。」

+3

這是如何解決問題的? – 2012-01-18 17:13:04

+2

問題解決了!我用.on()替換了所有.live()監聽器,並且它工作得很好。謝謝! – jalexsmith 2012-01-18 17:22:34

+0

@FelixKling,正確使用jQuery。 – Sparky 2012-01-18 17:31:37

0

live has been deprecated

使用新的()方法,而不是

+0

這會解決問題嗎? – 2012-01-18 17:13:23

+0

是的,它確實解決了這個問題。感謝downvote沒有明顯的原因 – cpjolicoeur 2012-01-18 17:23:27

+0

是的,downvote可能太多了。我不會這樣做,但其他人更嚴格。 – 2012-01-18 17:26:38

6

這是因爲live發生事件冒泡的優勢。當您在禁用按鈕上使用click時,事件仍會冒泡,因此實時觸發事件並執行所有事件處理程序。在執行任何操作之前,您可以檢查處理程序中按鈕的啓用狀態。試試這個

$("#the_button").button({ 
     icons: { 
      primary: "ui-icon-disk" 
     }, 
    disabled: true 
}).live('click',function() { 
    if($(this).is(':enabled')){ 
     alert('clicked'); 
    } 
}); 

工作Demo

另外,作爲由他人live說是從1.7+版本過時,所以你可能會試圖使用on但這個問題仍然會存在,你必須處理它我上面描述的方式。

+0

事實上,當我將所有內容切換到.on()時,問題似乎都消失了。 – jalexsmith 2012-01-18 17:23:41

+1

@ user969352 - 它工作正常,因爲您可能沒有將'selector'傳遞給第二個可選參數的'on'方法。如果'selector'被省略或爲null,那麼事件處理程序被稱爲直接或直接綁定,而不是純粹用於事件冒泡機制的'live',因爲它在文檔級別附加事件處理程序。 – ShankarSangoli 2012-01-18 17:29:29

+0

我不確定你提供的理由是否正確。顯然這個問題只存在於Chrome和Safari(不瞭解Opera)。 – 2012-01-18 18:26:37

相關問題