我有这种处理器的事件处理程序处理选择两次
$(".mydiv").on('click', function(e){
// some logic
$(this).toggleClass('active');
//other logic
});
我已经在那里被触发这两次事件中的错误,我看到,在第一次运行this
是".mydiv"
并在第二次运行this
是".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_view
,但在移动它有一个.mobile-view
类,所以在移动我希望search_filter
在点击的时候做逻辑上不移动在check_area
(这是复选框+标签)和.cat
(类别)
当检查第一个和第二个触发器上的事件时,第一个目标是标签(我点击了)但第二个目标是复选框(我没有点击)
即使我停止传播,这可能是因为自举(或一些其他的框架LIB)具有当标签被点击复选框是click()
版以及的事件?
你有没有试过e.preventDefault(); ? – 2014-09-03 08:27:29
检查事件注册码是否被调用两次 – 2014-09-03 08:27:33
@ArunPJohny是最有可能发现的。事件处理程序将被执行两次的唯一方法是它被调用两次,通常是因为分配它的代码运行两次。 – Archer 2014-09-03 08:32:00