0

我正在听一个点击事件。触发时,我需要绑定一个不同的事件(对于其他元素),但它会在第一个事件上同时触发。

我的代码:

$(".element1").on("click", function(){  
    console.log("triggered element1");  
    $(".element2").on("click", function(){  
        console.log("triggered element2");  
    })  
});
4

2 回答 2

1

.element2每次.element1单击时,都会绑定一个单独的事件处理程序副本。如果您想防止这种情况发生,请在变量中记住您是否已经绑定了处理程序。

var e2bound = false;
$(".element1").on("click", function(){  
    console.log("triggered element1");  
    if(!e2bound){
        $(".element2").on("click", function(){  
            console.log("triggered element2");  
        })
        e2bound=true;
    }
});

另一种解决方案是在运行时取消绑定第一个处理程序:

$(".element1").on("click", function e1handler(){  
    console.log("triggered element1");  
    $(this).off("click", e1handler);
    $(".element2").on("click", function(){  
        console.log("triggered element2");  
    })  
});
于 2012-11-01T19:31:20.577 回答
0

尝试使用.off()删除事件并使用e.stopPropgation()

$(".element1").on("click", function(){  
    console.log("triggered element1");  
    $(".element2").off('click').on("click", function(e){  
        e.stopPropagation();
        console.log("triggered element2");  
    })  
});

频繁绑定和解除绑定是一种不好的做法。如果可能,需要避免它。如果可以显示 HTML 结构会更容易。

于 2012-11-01T19:30:46.817 回答