window.joyroomAutoSelectTest = 'EXECUTED'; console.log('JOYROOM AUTO SELECT SCRIPT LOADED'); debugger; (function ($) { 'use strict'; if (!$) return; function autoSelectVariations() { $('.variations_form').each(function () { var $form = $(this); if ($form.data('auto-select-complete')) return; var variations = $form.data('product_variations') || []; var $selects = $form.find('select[name^="attribute_"]'); if (!variations.length || !$selects.length) return; var target = variations.find(function (v) { if (!v.is_purchasable || !v.is_in_stock) { return false; } return $selects.toArray().every(function (select) { var value = v.attributes[select.name]; if (value === undefined || value === '') { return true; } return $(select).find('option').filter(function () { return this.value === value && !this.disabled; }).length !== 0; }); }); if (!target) return; // 颜色优先通过 ShopEngine 色块点击来选择 $selects.each(function () { var select = this; var $select = $(select); var value = target.attributes[select.name]; if (value === undefined || value === '') return; if (select.name === 'attribute_pa_color') { var $swatch = $form .find('.shopengine_swatches .swatch_color') .not('.swatch_color_loop') .filter(function () { return $(this).data('value') === value; }) .first(); if ($swatch.length) { if (!$swatch.hasClass('selected')) { $swatch.trigger('click'); } return; } } if ($select.val() !== value) { $select.val(value).trigger('change'); } }); $form.trigger('check_variations'); // 延迟确认所有属性均已选择 setTimeout(function () { var complete = $selects.toArray().every(function (select) { return !!$(select).val(); }); if (complete) { $form.data('auto-select-complete', true); } }, 300); }); } function startAutoSelect() { autoSelectVariations(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', startAutoSelect); } else { startAutoSelect(); } $(window).on('load', startAutoSelect); $(document).on( 'wc_variation_form woocommerce_update_variation_values', startAutoSelect ); // 等待 WooCommerce 和 ShopEngine 初始化,最多检查 20 秒 var attempts = 0; var timer = setInterval(function () { startAutoSelect(); attempts++; if (attempts === 40) { clearInterval(timer); } }, 500); })(window.jQuery);