我已经使用Wordpress和WooCommerce建立了一个自定义网站,并安装了Select2来生成自定义选择,效果很好。我遇到的问题是WooCommerce页面上的某些选择,特别是那些触发更改事件的选择。
定制选择成功更改了所选的选项,但是用于触发事件的选择引起了问题。例如,产品页面上的颜色变化下拉列表或商店页面上的“排序依据”选择。
我浏览了WooCommerce JS文件,发现了一些WooCommerce特定事件,这些事件是在使用实际选择框进行选择时触发的,但是我不确定在使用Select2时如何实现该事件。
这是与我正在谈论的事件有关的WooCommerce JS的副本(在本例中为产品变体的select的更改):
.on( 'change', '.variations select', function() {
$form.find( 'input[name="variation_id"], input.variation_id' ).val( '' ).change();
$form.find( '.wc-no-matching-variations' ).remove();
if ( $use_ajax ) {
if ( $xhr ) {
$xhr.abort();
}
var all_attributes_chosen = true;
var some_attributes_chosen = false;
var data = {};
$form.find( '.variations select' ).each( function() {
var attribute_name = $( this ).data( 'attribute_name' ) || $( this ).attr( 'name' );
if ( $( this ).val().length === 0 ) {
all_attributes_chosen = false;
} else {
some_attributes_chosen = true;
}
data[ attribute_name ] = $( this ).val();
});
if ( all_attributes_chosen ) {
// Get a matchihng variation via ajax
data.product_id = $product_id;
$xhr = $.ajax( {
url: wc_cart_fragments_params.wc_ajax_url.toString().replace( '%%endpoint%%', 'get_variation' ),
type: 'POST',
data: data,
success: function( variation ) {
if ( variation ) {
$form.find( 'input[name="variation_id"], input.variation_id' )
.val( variation.variation_id )
.change();
$form.trigger( 'found_variation', [ variation ] );
} else {
$form.trigger( 'reset_data' );
$form.find( '.single_variation_wrap' ).after( '<p class="wc-no-matching-variations woocommerce-info">' + wc_add_to_cart_variation_params.i18n_no_matching_variations_text + '</p>' );
$form.find( '.wc-no-matching-variations' ).slideDown( 200 );
}
}
} );
} else {
$form.trigger( 'reset_data' );
}
if ( some_attributes_chosen ) {
if ( $reset_variations.css( 'visibility' ) === 'hidden' ) {
$reset_variations.css( 'visibility', 'visible' ).hide().fadeIn();
}
} else {
$reset_variations.css( 'visibility', 'hidden' );
}
} else {
$form.trigger( 'woocommerce_variation_select_change' );
$form.trigger( 'check_variations', [ '', false ] );
$( this ).blur();
}
// Custom event for when variation selection has been changed
$form.trigger( 'woocommerce_variation_has_changed' );
} )
然后我自己尝试利用此事件:
$('#pa_colour').select2();
$('#pa_colour').on('change', function(){
var $form = $(this).parents('form');
$form.trigger( 'woocommerce_variation_select_change' );
$form.trigger( 'woocommerce_variation_has_changed' );
});
不幸的是,该站点尚未启用,因此我无法提供链接,但希望您能理解。
如果有人可以在这里帮助我,我将非常感激,我不确定WordPress钩子(如果是这样)如何工作,我可能只是想念一些明显的东西。
谢谢,
凯瑟琳
最佳答案
完全不是一个解决方案,但是我最终用Selectric插件替换了Select2插件,并且效果很好。那好吧!多谢你们。 http://lcdsantos.github.io/jQuery-Selectric/
关于javascript - 使用Select2而不是实际选择时,WooCommerce事件未触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32305298/