Функция не работает после ajax [дубликата]

-3

Возможный дубликат:
Функции jquery bind и триггеры после вызова ajax

    $('.chatr').mouseover(function() {
    $('#'+this.id+" .action").removeClass('dn');
    });

Функция работает, когда страница загружается, но когда новый контент загружается через ajax, функция для нового div не работает

Теги:
function

4 ответа

2

Вам необходимо использовать делегат:

$(document).on('mouseover', '.chatr', function() {
    $(this).find('.action').removeClass('dn');
});

Однако, если у вас есть контейнер для всех ваших .chatr элементов, используйте идентификатор этого контейнера вместо document.

1

Это связано с тем, что события загружаются на странице. Конкретный .chatr элемент добавляется после загрузки, поэтому вы должны использовать то, что называется делегированным обработчиком событий. Попробуй это:

$(document).on('mouseover', '.chatr', function() {
    $('#' + this.id + " .action").removeClass('dn');
});

Обратите внимание, что вы должны заменить document ближайшим статическим родительским элементом, к которому добавляется содержимое.

0

Обработчики событий jQuery привязаны только к элементам, которые существуют при выполнении кода. Элементы, которые добавляются после выполнения этого кода, автоматически не привязывают обработчик события, даже если они соответствуют критериям для селектора. Решение - это делегирование событий:

$(document).on('click', '.chatr', function(e) {
    $('#'+this.id+" .action").removeClass('dn');
});

В идеале вы вызывали бы .on() (и привязывали обработчик события) к ближайшему элементу статического предка (то есть к тому, который всегда будет существовать и всегда будет содержать элементы, которые вы хотите инициировать для события), а не document, Не видя HTML, невозможно узнать, какой элемент должен быть.

0

Это не будет работать с динамически создаваемыми элементами, потому что обработчик обработчика события удаляется\не устанавливается для вновь добавленных элементов после начальной загрузки страницы.

Что вы можете сделать, так это добавить прослушиватель событий в родительский элемент div.chatr и проверить через $ (event.target).hasclass('chatr'), чтобы определить, должно ли событие срабатывать

Ещё вопросы

Сообщество Overcoder
Наверх
Меню