Функция по событию click срабатывает через один раз
Есть такая задача на OpenCart 3: при заказе определенных моделей товара, мне нужно автоматически добавить в корзину обязательный товар, контейнер. Если этих определенных товаров много, мне нужно изменить кол-во обязательных товаров. Вот как я это делаю: Для того, чтобы узнать модель товара в checkout/cart добавил несколько строк
<input type="hidden" class="wt_model" value="{{ product.model }}">
{% if product.model == "Сontainer" %}
<input type="hidden" class="wt_model wt_model_container" cart-id="{{ product.cart_id }}" value="{{ product.model }}">
{% endif %}
С помощью jquery я сделал проверку на наличие в корзине товаров, для которых нужен обязательный товар. Если такие товары есть я отправляю ajax url:index.php?route=checkout/cart/add запрос на добавление товара. В корзине может быть десяток подходящих товаров, но добавить обязательный нужно только 1 раз. Для этого, как видно в коде выше, я добавил class wt_model_container - (это важный момент для моего вопроса, я подозреваю, что проблема именно с этой частью) и jquery проверяю, если товар с таким классом уже существует, то ajax запрос не отправляю.
До этого момента все работает. Теперь мне нужно узнать сколько обязательных товаров нужно добавить. Делаю проверку на кол-во нужных товаров в корзине (при обновлении или удалении товаров) провожу математические вычисления, удаляю обязательный товар и он заново добавляется с учетом уже новых цифр кол-ва.
Я заметил, что при обновлении/удалении товара (самый последний кусок кода) функция срабатывает стабильно через один раз. Наверное это связано с тем, что class="wt_model wt_model_container" еще не существует в DOM, но я не знаю точно.
Подскажите, пожалуйста, как изменить код так, чтобы функция срабатывала правильно, без осечек.
Привожу весь код:
$(document).ready(function () {
var product_id_container = 1000;
// Получаем модель (категорию товара), кол-во и помещаем все в массив arr
var arr = [];
$( ".wt_tr" ).is(function( i, elem ){
var wt_model = $( elem ).find('.wt_model').val();
var qty = $( elem ).find(".form-control" ).val();
arr[i] = {
model: wt_model,
qty: qty
}
})
// Гриппируем товары по model(категории) и получаем общее кол-во по каждой категории
var arr_sum = [];
var arr_sum_qty = 0;
var is_wt_model_container = $( ".wt_tr .wt_model" ).is('.wt_model_container');
arr.forEach(function(o) {
var existing = arr_sum.filter(function(i) { return i.model === o.model })[0];
if (!existing){
arr_sum.push(o);
}else{
existing.qty = parseInt(existing.qty) + parseInt(o.qty);
}
// суммируем кол-во товаров для определения кол-ва контейнеров
if(o.model != "One" && o.model != "Two" && o.model != "Three" && o.model != "Four" && o.model != "Сontainer"){
arr_sum_qty += parseInt(o.qty);
}
});
// кол-во товаров / 10 (кол-во штук в 1 контейнере) и округляем в большую сторону
var qty_container = 10;
var total_container = Math.ceil(arr_sum_qty / qty_container);
// Перебираем в цикле сгруппированные товары, если находим model(категорию), для которой нужен контейнер,
// отправляем ajax запрос на добавление товара "Контейнер" в корзину. ID Container = 1000
for(var i = 0; i < arr_sum.length; i++){
if(arr_sum[i].model != "One" && arr_sum[i].model != "Two" && arr_sum[i].model != "Three" && arr_sum[i].model != "Four" && arr_sum[i].model != "Сontainer" && !is_wt_model_container){
$.ajax({
url: 'index.php?route=checkout/cart/add',
type: 'post',
data: 'product_id=' + product_id_container + '&quantity=' + (typeof (quantity) != 'undefined' ? quantity : total_container),
dataType: 'json',
success: function () {
$('.wt_tbody').load('index.php?route=checkout/cart .wt_tr');
},
error: function (xhr, ajaxOptions, thrownError) {
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
// выходим из цикла при первом совпадении и добавлении контейнера в корзину
if (i === 1){
break;
}
}
}
// При изменении товара в корзине, обновляем кол-во кнтейнеров для заказа
// cart_id - id контейнера в корзине, постоянно новое
$('.input-group-btn button').click(function(){
var cart_id = $( ".wt_tr .wt_model_container" ).attr('cart-id');
alert(cart_id)
$.ajax({
url: 'index.php?route=checkout/cart/remove',
type: 'post',
data: 'key=' + cart_id,
dataType: 'json',
success: function () {
$('.wt_tbody').load('index.php?route=checkout/cart .wt_tr');
//console.log('Success');
},
error: function (xhr, ajaxOptions, thrownError) {
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
});
});