#jquery #function #methods #fadeout
#jquery #функция #методы #затухание
Вопрос:
У меня есть эта функция:
$('#output').on('click', '[data-action="DELETE_ITEM"]', function () {
var itemInfo = $(this.dataset)[0];
var buttonOfProductHTML = document.querySelector(`[data-id='${itemInfo.id}']`);
var buttonOfDeletion = document.querySelector('[data-action="DELETE_ITEM"]');
$(buttonOfDeletion.parentElement.parentElement).fadeOut(1000);
var itemIndex = $('[data-action="DELETE_ITEM"]').index(this);
cart.splice(itemIndex, 1);
sessionStorage['shopCart'] = JSON.stringify(cart);
outputCart();
handleCartButton(buttonOfProductHTML, 0);
})
Я вижу эффект затухания только в том случае, если удаляю код из cart.splice, который удаляет строку из таблицы (корзины покупок). Я думаю, что удаление происходит быстрее, чем эффект. Как я могу правильно отложить удаление элемента корзины, чтобы увидеть эффект затухания?
Спасибо,
Ответ №1:
fadeOut
Метод jQuery принимает функцию обратного вызова в качестве второго параметра, который является необязательным. Функция обратного вызова выполняется, когда анимация заканчивается. Таким образом, вы можете выполнить fadeOut
и поместить весь свой код внутри этой функции обратного вызова. 🙂
$('#output').on('click', '[data-action="DELETE_ITEM"]', function() {
var itemInfo = $(this.dataset)[0];
var that = this;
var buttonOfProductHTML = document.querySelector(`[data-id='${itemInfo.id}']`);
var buttonOfDeletion = document.querySelector('[data-action="DELETE_ITEM"]');
$(buttonOfDeletion.parentElement.parentElement).fadeOut(1000, () => {
var itemIndex = $('[data-action="DELETE_ITEM"]').index(that);
cart.splice(itemIndex, 1);
sessionStorage['shopCart'] = JSON.stringify(cart);
outputCart();
handleCartButton(buttonOfProductHTML, 0);
});
})
Комментарии:
1. Однако это изменяет код. Теперь он не удаляет нужный элемент, всегда первый. Во-вторых, он перенаправляет пользователя на сайт PayPal. У меня есть кнопка на этой странице, которая делает это, но теперь она автоматически делает это при удалении. Должен ли я обратиться к другому разделу, чтобы исправить это, или мы можем что-то сделать с затуханием? Исходный код работает правильно.
2. Я допустил ошибку в коде, т.Е. Функция
this
внутри стрелки ссылалась наwindow
, а не на элемент. Я это исправил. Теперь оба кода одинаковы 🙂3. Спасибо, теперь он удаляет нужный элемент. Единственное, чего я не понимаю, почему исходный код запускает проверку PayPal, если я нажимаю кнопку, а версия fadeOut запускает проверку при удалении, даже если я этого не хочу.
4. @DarkArchon Я не думаю, что код перенаправления присутствует в функции обратного вызова. Где-то еще может быть какой-то код запуска. Может присутствовать внутри
outputCart
илиhandleCartButton
.5. Да, мне пришлось удалить статическую форму PayPal со страницы, а также добавить ее из JS. Спасибо!