如何根据选择器更改取消绑定和重新绑定事件

时间:2016-08-05 09:48:47

标签: javascript jquery javascript-events

对于我如何处理绑定到jquery选择器的事件监听器,这对我来说更像是一个学习的东西。

所以说我有以下代码:

<html>
<div class = "one">one</div>
<div class = "two">two</div>
</html>

<script>
$(".one").click(function() {
$(this).removeClass("one").addClass("two");
console.log("one");
})
$(".two").click(function() {
console.log("two");
})

</script>

在第一次单击时,选择器不再有效(因为类现在是两个而不是一个)。但是事件仍然绑定到此元素。这个元素也不会触发&#34; .two&#34;处理程序,因为它已被绑定。

使用初始点击取消绑定处理程序然后重新绑定的最简单方法是什么?

2 个答案:

答案 0 :(得分:2)

将事件绑定在document上,无需取消绑定并重新绑定事件。

$(document).on("click", ".one", function() {
    $(this).removeClass("one").addClass("two");
    console.log("one");
});

$(document).on("click", ".two", function() {
    console.log("two");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="one">one</div>
<div class="two">two</div>

答案 1 :(得分:1)

$(".one").unbind("click");
$(".one").bind("click", fn);

您可以使用unbind()删除使用bind() 添加的事件(或如上所述绑定)

https://jsfiddle.net/7yn7apte/ 无重新绑定

https://jsfiddle.net/7yn7apte/1/ 重新绑定

嗯,这回答了你的问题。但是,您最好使用on()off()作为bind()来电on()unbind()来电off()

您可以在https://stackoverflow.com/a/9113835/6341631

找到更详尽的解释