2012-01-18 104 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

相关问题