2

我不知道它是否应该是这样的,我在做一些根本错误的事情。

我有一个div给定的类,当你点击它时div它会给出一个响应,但是我有另一个div,当点击那个时它会从第一个中删除类div

但是,当我在删除其类后继续单击第一个时div,我继续得到响应。

为什么我删除课程后点击仍然有反应?

HTML

<div class="testing">Testing</div>

<div id="testing_remover">Remove class from testing</div>

JS:

$(document).ready(function(){
    $('.testing').click(function(){
        console.log('testing is active');
    });

    $('#testing_remover').click(function(){
        $('.testing').removeClass('testing');
    });
});

小提琴:http: //jsfiddle.net/P3NpK/

4

2 回答 2

6

事件处理程序绑定到元素,而不是选择器。

要删除处理程序,请使用.off()

$(".testing").off("click");

早于 1.7的jQuery 版本最好使用.unbind..off

于 2012-11-19T14:22:55.500 回答
2

您必须将事件处理程序委托给 DOM 树的更高层,或者显式取消绑定事件处理程序。一旦事件绑定到一个元素,仅仅更改类名不会删除事件处理程序。

要删除事件处理程序(更新的小提琴):

$('#testing_remover').click(function(){
    $('.testing').off('click');
});

委派事件处理程序(更新的小提琴):

$(document).on("click", ".testing", function(){
    console.log('testing is active');
});

委托方法起作用的原因是,一旦事件冒泡到所选元素(在本例中为document),jQuery 就会捕获该事件。它检查事件目标是否与选择器匹配,如果匹配,则执行事件处理程序。如果您删除了该类,则目标将不再与选择器匹配。

于 2012-11-19T14:23:11.783 回答