Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 事件处理程序处理选择器两次_Javascript_Jquery_Event Handling - Fatal编程技术网

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不起作用之前和之后,事件触发两次的可能性很小: