javascript - 由于调试器,Jquery 事件(例如单击)触发了两次
问题描述
很抱歉,我的起源描述不清楚。我修改了我的问题:
我正在使用jQuery,如附图所示,每次我将事件侦听器(例如单击)附加到元素时,它都会触发两次。看起来这个问题是由于 jQuery 调试器造成的。
我想问一下除了在侦听器之前添加 unbind() 或 off() 之外是否还有其他方法来解决问题,我已经尝试过这些方法,但是它删除了已经附加到元素的侦听器(例如我有 #element1 其中在 html 中创建,然后使用 jQuery 将两个元素 #element2 和 #element3 附加到 #element1,如果我使用
$('#element1').off('click').on('click', '#element2', function(){
//implementation
}
$('#element1').off('click').on('click', '#element3', function(){
//implementation
}
#element2 的单击事件将不再起作用,因为在这种情况下,附加在其上的单击侦听器已被删除。所以我问是否有更好的方法来做到这一点?
顺便说一句,我想知道 VM 7188 侦听器来自哪里(它看起来像是来自 jQuery 调试器),以及是否有办法删除这个侦听器,这样我每次编写侦听器时就不再需要使用 off() , 谢谢。
解决方案
尚不清楚为什么您需要删除并附加处理程序#element1
只是因为#element2
已删除并动态创建;您正在使用委托语法,因此#element2
动态创建完全没问题。无论如何,您只需要设置一次该处理程序。例子:
// Note this continues to work even as we remove and recreate #element2
$("#element1").on("click", "#element2", function() {
console.log("Got the click on #element2");
});
function tick() {
$("#element1").append("<span id='element2'>Click me</span>");
setTimeout(function() {
$("#element2").remove();
setTimeout(tick, 500);
}, 1500);
}
tick();
<div id="element1"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
但是要针对特定的处理程序,您可以使用事件命名空间,例如:
$('#element1').off("click.my-namespace").on('click.my-namespace', '#element2', function(){
//implementation
});
有关更多信息,请参阅文档中的“事件名称和命名空间” 。
推荐阅读
- python - Django模板`With`运算符复杂的布尔赋值
- reactjs - react-redux 中对象的最佳相等性检查?
- java - 应用程序启动时如何显示启动画面
- python-3.x - 如果 K 等于 KNN 中的实例总数怎么办?
- c# - 带有 url 参数的 MVC 控制器操作
- c# - DataTemplate 中的按钮如何注册并监听后面代码中按钮的加载事件,但无法访问数据上下文?
- javascript - 如何修复此代码中的“无法读取未定义的属性匹配”
- amazon-web-services - 简单的 Kubernetes 集群成本 GCP vs AWS vs Azure vs DO
- javascript - 一天/一周/一个月后触发 Axios 调用
- api - ActiveCollab API 分页和速率限制