我试图重写以下函数以进行事件委派:
$("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打开,但不再关闭。我的错误在哪里?
答案 0 :(得分:3)
问题是,li
打开后,系统closed
被删除,open
被添加,这意味着选择器li.closed
不匹配
在事件委托的情况下,选择器被懒惰地评估,但是在正常事件处理的情况下,处理程序在事件注册时被注册到目标元素,所以在那个时候哪个元素具有类{{1将获得处理程序
closed