我正在使用所有庫的最新版本(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
我正在使用所有庫的最新版本(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
從版本1.7開始,.live() has been deprecated。
「在jQuery 1.7的,所述.live()方法被棄用。使用.on()到 附着事件處理程序」。
「在jQuery 1.7中,。對()方法是用於 事件處理程序安裝到一個文件的優選方法。」
這是如何解決問題的? – 2012-01-18 17:13:04
問題解決了!我用.on()替換了所有.live()監聽器,並且它工作得很好。謝謝! – jalexsmith 2012-01-18 17:22:34
@FelixKling,正確使用jQuery。 – Sparky 2012-01-18 17:31:37
使用新的()方法,而不是
這會解決問題嗎? – 2012-01-18 17:13:23
是的,它確實解決了這個問題。感謝downvote沒有明顯的原因 – cpjolicoeur 2012-01-18 17:23:27
是的,downvote可能太多了。我不會這樣做,但其他人更嚴格。 – 2012-01-18 17:26:38
這是因爲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
但這個問題仍然會存在,你必須處理它我上面描述的方式。
事實上,當我將所有內容切換到.on()時,問題似乎都消失了。 – jalexsmith 2012-01-18 17:23:41
@ user969352 - 它工作正常,因爲您可能沒有將'selector'傳遞給第二個可選參數的'on'方法。如果'selector'被省略或爲null,那麼事件處理程序被稱爲直接或直接綁定,而不是純粹用於事件冒泡機制的'live',因爲它在文檔級別附加事件處理程序。 – ShankarSangoli 2012-01-18 17:29:29
我不確定你提供的理由是否正確。顯然這個問題只存在於Chrome和Safari(不瞭解Opera)。 – 2012-01-18 18:26:37
您的代碼似乎在Firefox中運行良好,但在Chrome和Safari中造成問題。 [這是前段時間報告的bug](http://bugs.jquery.com/ticket/8165),不確定其狀態。 – 2012-01-18 18:35:17