即使在禁用按钮上,jQuery .live('click')也会触发

jal*_*ith 6 jquery jquery-ui

我正在使用所有库的最新版本(jQuery 1.7.1和jQuery UI 1.8.16),但是我已经绑定.live('click')事件的按钮即使在按钮被禁用时仍会触发.当我将常规.click()事件绑定到它时,它不会触发.

有什么建议?我正在考虑我正在使用.live()不当或这是jQuery UI中的一个错误.

这是一个JSFiddle来演示. http://jsfiddle.net/Kb66j/1/

谢谢!亚历克斯

Sha*_*oli 6

那是因为live利用事件冒泡.当您click在禁用按钮上时,事件仍然会冒泡,因此实时触发事件并click执行所有事件处理程序.在执行任何操作之前,您可以检查处理程序内按钮的启用状态.试试这个

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

工作演示

另外,如其他人所述,live不推荐使用1.7+版本,因此您可以尝试使用,on但这个问题仍然存在,您必须按照我上面描述的方式处理它.


Spa*_*rky 2

从版本 1.7 开始,.live() 已被弃用

“从 jQuery 1.7 开始,.live() 方法已被弃用。使用.on()附加事件处理程序。”

此外,从版本 1.7 开始,.on()优于.bind()

“从 jQuery 1.7 开始,.on() 方法是将事件处理程序附加到文档的首选方法。”

  • 问题解决了!我用 .on() 替换了所有 .live() 监听器,效果很好。谢谢! (2认同)
  • @ShankarSangoli 提供了问题的正确(或至少更好)答案和解释。OP 已经知道,简单地使用“click”而不是“live”确实可以解决问题。您建议将“live”切换为“on”,他显然以错误的方式(在不知情的情况下)执行了此操作,现在他最终使用了与使用“click”等效的东西。所以你也可以只写*“使用`click`而不是`live`”*。将“live”更改为等效的“on”(您的建议)**不能解决**当前的问题。因此,你的答案在我看来没有用。 (2认同)