Функция по событию 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);
          }
        });
      });

    });

Ответы (0 шт):