Javascript Делегирование событий
Я пытаюсь переписать следующую функцию для делегирования событий:
$("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");
}
});
Как видите, я не сильно изменился. Уль открывается, но больше не закрывается. Где моя ошибка?
1 ответ
Проблема когда-то li
открыт, класс closed
удаляется и open
добавлен, что означает, что селектор li.closed
не совпадает
В случае делегирования события селекторы оцениваются лениво, но в случае нормальной обработки события обработчики регистрируются в целевом элементе во время регистрации события, так что в то время, какой элемент имел класс closed
получит обработчик
$(document).on("click", "ul > li:has(ul)", function (e) {
var li = $(this).toggleClass("closed open");
li.children('ul').slideToggle('fast');
});