我正在使用所有库的最新版本(jQuery 1.7.1和jQuery UI 1.8.16),但是我已经绑定.live('click')事件的按钮即使在按钮被禁用时仍会触发.当我将常规.click()事件绑定到它时,它不会触发.
有什么建议?我正在考虑我正在使用.live()不当或这是jQuery UI中的一个错误.
这是一个JSFiddle来演示. http://jsfiddle.net/Kb66j/1/
谢谢!亚历克斯
那是因为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但这个问题仍然存在,您必须按照我上面描述的方式处理它.
从版本 1.7 开始,.live() 已被弃用。
“从 jQuery 1.7 开始,.live() 方法已被弃用。使用.on()附加事件处理程序。”
“从 jQuery 1.7 开始,.on() 方法是将事件处理程序附加到文档的首选方法。”