Реактивировать код после использования фильтра
Я не очень знаком с jQuery в сочетании с jQuery Migrate. Сайт, на котором я работаю, использует jQuery 1.12 с версией Migrate 1.4.1.
После некоторого поиска приведенный ниже скрипт отлично работает при загрузке страницы:
jQuery(".single_add_to_cart_button").click(function(e) {
e.preventDefault();
var url = jQuery(this).data('href');
window.open(url, '_blank');
return false;
});
Но после некоторого фильтра, построенного по старинке, этот слушатель "забывается".
Что делать?
2 ответа
Вы удаляете элемент, к которому прикреплен слушатель. Это происходит, вероятно, во время фильтрации. Вы можете обойти это поведение, если установите слушателя на родительский элемент, который вообще не удаляется (например, в <td>
<table>
элемент). Я бы не поставил слушателя на верхний уровень (document
), потому что гораздо эффективнее установить его на родителя, который не удаляется. Если вы установите слушателя на document
каждый клик отслеживается и ищется .single_add_to_cart_button
элемент.
Вы можете установить слушателя на родителя, но реагировать только на клики .single_add_to_cart_button
если вы используете следующий фрагмент:
jQuery("#tableWithId").on("click", ".single_add_to_cart_button", function(e) {
e.preventDefault();
var url = jQuery(this).data('href');
window.open(url, '_blank');
return false;
});
Если элементы, которые соответствуют .single_add_to_cart_button
удалены и повторно добавлены, вам нужно использовать делегирование или поместить слушателя в элемент, который всегда там (тело, документ), и затем запускать его только в элементах, которые соответствуют вашему запросу, как таковой:
jQuery(document).on('click', '.single_add_to_cart_button', function (e) {
e.preventDefault();
var url = jQuery(this).data('href');
window.open(url, '_blank');
return false;
});