jQuery 如何在 class 上添加处理程序,但前提是尚未安装?
jQuery how to add a handler on a class but only if isn't already installed?
我有一系列节点,我想向其添加点击处理程序,这些节点将切换一个动作,点击一次并设置一些内容,再次点击并清除它。
问题是同一处理程序被安装了不止一次,因此单击会导致调用处理程序。
如何检查是否为 class 安装了处理程序,然后仅在尚未安装时安装?
我知道已经有类似的 posts,但是在阅读这些之后我找不到解决我的问题的方法,我安装了 class.[=14 的处理程序=]
[编辑],我的代码:
//Need to detect is handler has already been installed before adding the handler below:
$('.btnExpCol').click(function() {
//Do something when any element with this class is clicked
});
很多评论都是基于 'id',如果你重新阅读我的 post,我使用的是 'class' 选择器,但是这个问题现在已经解决了解决方案效果很好。
[新代码,现在有效]:
$('.btnExpCol').off("click").on("click", function() {
//Do something when any element the has this class is clicked
});
有几种方法可能有效。
1) 在安装处理程序时更改元素(添加 class)并在添加时使用 :not(.hashandler) 以确保不会添加两次。
2) 不要这样做。相反,只需将一个处理程序(永远)添加到根 $(document).on('click','.myclass',function(){...});
任何 "myclass" 个元素将 运行 单击时的功能。
先尝试 unbinding
然后 binding
再试一次
$("#id").unbind("click").bind("click",function(){...
更喜欢这个(感谢@charlietf)
$("#someid").off("click").on("click",function(){...
我会用 off and then adding it again with on 禁用它。
但是如果你想去做,这应该给你一个起点:
<a href="#" id="link">Link</a>
$("#link").on("click", function(e){
alert("link clicked");
});
$.each($._data($("#link")[0], "events"),function(i, v){
if(v[0].type === "click") {
alert("the click handler is set, do not add new");
}
});
https://jsfiddle.net/nygy1s9j/10/
取自 this question 的想法,经过 jquery 3.1.1
测试
我有一系列节点,我想向其添加点击处理程序,这些节点将切换一个动作,点击一次并设置一些内容,再次点击并清除它。
问题是同一处理程序被安装了不止一次,因此单击会导致调用处理程序。
如何检查是否为 class 安装了处理程序,然后仅在尚未安装时安装?
我知道已经有类似的 posts,但是在阅读这些之后我找不到解决我的问题的方法,我安装了 class.[=14 的处理程序=]
[编辑],我的代码:
//Need to detect is handler has already been installed before adding the handler below:
$('.btnExpCol').click(function() {
//Do something when any element with this class is clicked
});
很多评论都是基于 'id',如果你重新阅读我的 post,我使用的是 'class' 选择器,但是这个问题现在已经解决了解决方案效果很好。
[新代码,现在有效]:
$('.btnExpCol').off("click").on("click", function() {
//Do something when any element the has this class is clicked
});
有几种方法可能有效。 1) 在安装处理程序时更改元素(添加 class)并在添加时使用 :not(.hashandler) 以确保不会添加两次。
2) 不要这样做。相反,只需将一个处理程序(永远)添加到根 $(document).on('click','.myclass',function(){...});
任何 "myclass" 个元素将 运行 单击时的功能。
先尝试 unbinding
然后 binding
再试一次
$("#id").unbind("click").bind("click",function(){...
更喜欢这个(感谢@charlietf)
$("#someid").off("click").on("click",function(){...
我会用 off and then adding it again with on 禁用它。
但是如果你想去做,这应该给你一个起点:
<a href="#" id="link">Link</a>
$("#link").on("click", function(e){
alert("link clicked");
});
$.each($._data($("#link")[0], "events"),function(i, v){
if(v[0].type === "click") {
alert("the click handler is set, do not add new");
}
});
https://jsfiddle.net/nygy1s9j/10/
取自 this question 的想法,经过 jquery 3.1.1
测试