jQuery действие щелчка, удаленное функцией сортировки

45
4

У меня есть функция, включая следующий код:

$(list).append(item);
$(list).html(
$(list).children("li").sort(function (a, b) {
return $(a).val() - $(b).val();
}));
$(item).click(this.listClick);

(В принципе, он создает <ul> <li> из массива элементов, включая функцию listClick которая срабатывает при нажатии любого из элементов списка, а затем сортировка списка в соответствии со li value).

Если я вычеркнул функцию sort из скрипта, то он отлично работает (как в, список скомпилирован, с функцией щелчка работает отлично, хотя и не в правильном порядке). Однако, если я сортирую список, он удаляет функциональность кликов (то есть, нажатие элементов не выполняет функцию listClick).

Почему это удаляется? Кажется, не имеет значения, добавляю ли функцию сортировки до или после listClick строки listClick.

спросил(а) 2015-04-01T16:35:00+03:00 4 года, 8 месяцев назад
1
Решение
49

Вероятно, потому, что вы используете метод html который заменяет содержимое html элемента и не имеет никакого отношения к методу sort. Старые элементы удаляются и их прикрепленные обработчики событий тоже. Вы должны либо использовать делегирование делегирования, либо лучше использовать appendTo вместо html:

 $(list).children("li").sort(function (a, b) {
return $(a).text() - $(b).text();
}).appendTo(list);

Поскольку appendTo только перемещает элементы, обработчики событий сохраняются.

Также обратите внимание, что элемент li не имеет value поэтому .val() возвращает undefined значение. Вы должны использовать text метод для получения textContent элемента. И если list уже является объектом jQuery, нет необходимости обертывать его конструктором jQuery.

ответил(а) 2015-04-01T16:41:00+03:00 4 года, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема