Intereting Posts
«Слабость / недостаток» сценария php exec python Laravel localhost работает, но heroku дает 500 ошибок Отключить проверку подлинности для поля выбора в Symfony 2 Type PHP – слой абстракции DB использует статический класс vs singleton object? WordPress Theme Customizer – добавление области для перемещения пользователей и организации виджетов Ajax mysqli не работает В PHP, Как вызвать функцию в строке? Нужна помощь в создании запроса на основе значений фильтра ui как ускорить этот код php / mysql Как переопределить не подключаемую функцию родительской темы из файла non function.php? передача массива POST в php-функцию MVC: переменные, используемые только для регистрации пользователя. Размещено в помощнике контроллера или модели? Могу ли я использовать график api для Facebook, чтобы получить фотографии профилей друзей пользователей? Создать новый XML-файл и записать в него данные? Попытка эхо-функции JS в PHP

Слушатель событий после обновления Ajax

У меня есть контрольный раздел на моем сайте, и я запускаю этот прослушиватель событий в разделе количества, чтобы каждый раз, когда количество обновлений на основе продукта было нажато, весь div перезагружается с использованием AJAX (так что все цены, общее количество обновлений также)

Код работает один раз, но после этого функция больше не работает.

$(".cart-product-quantity").bind('keyup mouseup', function () { console.log("working"); var id = $(this).attr("name"); var quantity = $(this).val(); $.ajax({ url: 'assets/processes/updateCartQuantities.php', type: 'POST', data: {'id': id, 'quantity' : quantity}, success: function(data) { $('.checkout-table-outer').load(document.URL + ' .checkout-table'); } }); // end ajax call }); 

Я уверен, что это связано с тем, что я обновляю раздел, где находится .cart-product-quantity , но как мне обойти его, чтобы он работал каждый раз?

благодаря

Я вижу, что вы являетесь обязательным событием для количества .cart-product-quantity но каким-то образом элемент теряется при обновлении. В этом случае необходимо использовать делегирование событий для динамических элементов.

Объяснение:

 $(".cart-product-quantity").bind('keyup mouseup', function () {... 

Итак, что делал ваш код, он выбирает элементы с классом .cart-product-quantity и связывает переданную функцию с событиями, предоставляемыми 'keyup mouseup' непосредственно элементам

Но по мере того как вы обновляете DOM в своем вызове ajax, элементы снова воссоздаются, хотя у них одинаковая структура и классы html они не одинаковы в памяти. Эти элементы являются новыми элементами, и поскольку вы никогда не привязывали какие-либо события к этим вновь созданным элементам, события никогда не вызываются.

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

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

Делегирование событий позволяет нам присоединить одного прослушивателя событий к родительскому элементу, который будет срабатывать для всех потомков, соответствующих селектору, независимо от того, существуют ли эти потомки или добавлены в будущем.

Теперь,

 $(document).on('keyup mouseup', ".cart-product-quantity", function () {... 

Что делает вышеприведенный код, он добавляет событие в document и он делегирует события его рекурентам, используя селектор ".cart-product-quantity" . Здесь document не обновляется, и его всегда есть так, он может получать эти события и динамически выбирать свои дедукты, используя селекторные и триггерные события на них.

Как, эта делегация происходит динамично. он выбирает всех вновь созданных дециентов и тем самым может инициировать события на ваших обновленных элементах.

Попробуйте использовать этот jquery

 $(document).on('keyup mouseup', ".cart-product-quantity", function () { console.log("working"); var id = $(this).attr("name"); var quantity = $(this).val(); $.ajax({ url: 'assets/processes/updateCartQuantities.php', type: 'POST', data: {'id': id, 'quantity' : quantity}, success: function(data) { $('.checkout-table-outer').load(document.URL + ' .checkout-table'); } }); // end ajax call });