Javascript 事件处理程序处理选择器两次
我有这样的处理程序Javascript 事件处理程序处理选择器两次,javascript,jquery,event-handling,Javascript,Jquery,Event Handling,我有这样的处理程序 $(".mydiv").on('click', function(e){ // some logic $(this).toggleClass('active'); //other logic }); 我有一个错误,这个事件被触发了两次,我看到在第一次运行时,这个是”.mydiv“,在第二次运行时,这个是”.mydiv.active“,似乎在事件处理过程中,”.mydiv.active“被添加到与选择器匹配的节点列表中 有办法解决这个问题吗 这是更完整的代码: $(".
$(".mydiv").on('click', function(e){
// some logic
$(this).toggleClass('active');
//other logic
});
我有一个错误,这个事件被触发了两次,我看到在第一次运行时,这个
是”.mydiv“
,在第二次运行时,这个
是”.mydiv.active“
,似乎在事件处理过程中,”.mydiv.active“
被添加到与选择器匹配的节点列表中
有办法解决这个问题吗
这是更完整的代码:
$(".filter_view:not(.mobile-view) .filter_content .cat, .filter_view:not(.mobile-view) .filter_content .check_area, .mobile-view .search_filter").on("click", function(e){
debugger;
$(this).toggleClass("active");
e.stopPropagation();
// rest of the logic
});
<span class="check_area col-xs-4 col-md-2">
<input class="filter_checkbox" id="Neve" name="Neve" type="checkbox" value="Neve">
<label class="filter_checkbox_label" for="Neve">Neve</label>
</span>
$(“.filter\u view:not(.mobile view).filter\u content.cat、.filter\u view:not(.mobile view).filter\u content.check\u area、.mobile view.search\u filter”)。打开(“单击”,函数(e){
调试器;
$(此).toggleClass(“活动”);
e、 停止传播();
//其余的逻辑
});
内韦
基本上,父级是.filter\u view
,但在移动设备上它有一个.mobile view
类,因此在移动设备上,我希望搜索\u filter
执行逻辑,在单击检查区域
(复选框+标签)和.cat
(类别)时不移动
在第一个和第二个触发器上检查事件时,第一个目标是标签(我单击的),而第二次目标是复选框(我没有单击)
即使我停止了传播,可能是引导程序(或其他一些框架库)在单击标签时发生了一个事件吗?复选框也是click()
ed?try
$(".mydiv").on('click', function(e){
// some logic
$(this).toggleClass('active');
e.stopPropagation();
});
stopPropagation()防止事件冒泡。添加
$(.mydiv”).off('click')
在绑定click事件之前,您向我们展示的代码可能会被调用两次,这会绑定事件处理程序两次。也许在多次调用的init()函数中有它?您是否尝试过e.preventDefault()?检查是否调用了事件注册码twice@ArunPJohny最有可能是现场。事件处理程序执行两次的唯一方式是调用两次,通常是因为分配它的代码运行了两次。在$(“.mydiv”)之前添加控制台日志。on('click',function(e){
并查看消息是否记录了两次..好的,我试图简化它,我将添加标记和完整的selectorI've StopperPogation,在ToggleClass不起作用之前和之后,事件触发两次的可能性很小: