我在这个主题上找到了很多例子。但是,我并不完全理解。我的逻辑看起来是否正确?我有一个div作为按钮(类.myClass)我不希望它可点击,除非myCount> = 1.
// I want to unbind if myCount == 0
if ( myCount == 0) {
$('.myClass').unbind().css("opacity","0.5");
} else {
// **would this rebind?**
$('.myClass').click(callMyFunction);
}
答案 0 :(得分:2)
我不确定你想要实现什么,但.unbind()
在没有参数的情况下调用时会删除附加到元素的所有处理程序。因此,$('.myClass').unbind()
会删除附加到元素.myClass
的所有事件处理程序。由于您似乎只是添加了一个事件处理程序click
,因此最好只取消绑定click
处理程序,如下所示:$('.myClass').unbind('click')
。这样,如果您稍后添加其他事件,则不会混淆为什么其他事件被解除绑定。
答案 1 :(得分:2)
click(callMyFunction)
是.bind("click", callMyFunction)
或.on("click", callMyFunction)
的简写。
绑定使用on()
取消绑定使用off()
。这些是自jQuery 1.7以来的首选方法。如果您使用的是旧版本,请使用bind()
,unbind()
或delegate()
和undelegate()
$('.myClass').off('click')
并绑定
$('.myClass').on('click', function(){});
正如另一篇文章所述,使用命名空间是对事件进行分类的另一种方法,例如click.mynamespace
。
有关不同可用绑定方法的更多详细信息,请参阅this post,并在更换内容和原因时引入了这些方法。
更多资源:
答案 2 :(得分:2)
您可以使用on()
的命名空间事件。 bind()
已被弃用。
var foo = function () { ... }
if (myCount)
$('.myclass').on('click.foo', foo)
else
$('.myclass').off('.foo')