我正在使用所有库的最新版本(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