Javascript事件委派

时间:2013-09-23 15:42:48

标签: jquery event-delegation

我试图重写以下函数以进行事件委派:

$("ul > li.closed").click(function (e) {
    if (e.target === this) {
        var li = $(this).closest('li');
        li.find(' > ul').slideToggle('fast');
        $(this).toggleClass("closed open");
    }
});

我改写的所有其他功能都运行得很好,但是这个功能没有。这是我写的:

$(document).on("click", "ul > li.closed", function (e) {
    if (e.target === this) {
        var li = $(this).closest('li');
        li.find(' > ul').slideToggle('fast');
        $(this).toggleClass("closed open");
    }
});

正如你所看到的,我并没有真正改变很多。 ul打开,但不再关闭。我的错误在哪里?

1 个答案:

答案 0 :(得分:3)

问题是,li打开后,系统closed被删除,open被添加,这意味着选择器li.closed不匹配

在事件委托的情况下,选择器被懒惰地评估,但是在正常事件处理的情况下,处理程序在事件注册时被注册到目标元素,所以在那个时候哪个元素具有类{{1将获得处理程序

closed