自定义变体选择脚本冲突

时间:2018-09-12 03:38:06

标签: javascript jquery dom woocommerce

因此,我有一个自定义脚本来更改默认的WooCommerce变体选择,到目前为止,很好的问题是,当变体缺货时,自定义选择应具有与默认选择相同的选项。

上面自定义“选择”,下面是默认设置。 Branco和P缺货。

Custom "select" above, default below. Branco and P are out of stock.

我发现WooCommerce Variations JS以编程方式删除了脱销的期权,但是由于我的脚本在Variations JS之后运行,因此我认为它应该可以工作。我设法使其工作添加2000ms的setTimeout,但这太多了,它实际上破坏了我拥有的其他功能。如果有人知道如何解决此问题,我将不胜感激。

$('.variations select').each(function(){
    var select = $(this);
    var div = $('<div class="grupo-atributos">');
    var ul = $('<ul>');
    select.parent('.value').siblings('.label').find('label').each(function(){
      var label = $(this).text();
      div.append('<span>'+label+'</span>');
    });

    $('#custom-select-produto-variavel').append(div);
    div.append(ul);

    select.find('option').each(function(){
      var titulo = $(this).text();
      var data_value = $(this).val();
      ul.append('<li data-value='+data_value+'>'+titulo+'</li>');
    
    select.change(function(){
    select.find('option:selected').each(function(){
      var opcao_selected = $(this);
      select.find('option:not(:selected)').each(function(){
        var opcao_not_selected = $(this);
        $('#custom-select-produto-variavel li').each(function(){
          var opcao_custom = $(this);
          if(opcao_custom.attr('data-value')==opcao_selected.val())
              opcao_custom.addClass('atributo-selected');
          if(opcao_custom.attr('data-value')==opcao_not_selected.val())
              opcao_custom.removeClass('atributo-selected');
        });
      });
    });
    }).change();

    });
  });

  $('#custom-select-produto-variavel div ul li:contains("Escolha uma opção")').remove();

  $('#custom-select-produto-variavel ul li').click(function() {
    var novoVal = $(this).data('value');
    $('.variations select:has([value='+novoVal+'])').val(novoVal);
    $('.variations select').trigger('change');
  });
<div id="custom-select-produto-variavel"></div>

1 个答案:

答案 0 :(得分:0)

我发现选择变量具有100ms的启动延迟,因此要使我的脚本正常工作,我需要添加这些行。

$(document).ready(function(){
setTimeout(function(){
 // My script
}, 150);
});