我有一个关于可变产品的 WooCommerce 问题。我想向变体表单的“found_variation”事件添加监听器,以获取有关当前产品变体的信息。
我已经尝试过这个但不起作用:
jQuery.fn.wc_variation_form.bind( '发现变体', 函数(事件,变化){ console.log(变化); // 记录以查看变化信息 $('#product-price').html(variation.price_html); // 在自定义 html 元素中显示价格变化 } );
有什么想法吗?
我知道这是一篇旧帖子,但也有同样的问题。最终我用下面的代码让它工作:
$(document).on( 'found_variation', 'form.cart', function( event, variation ) {
/* Your code */
});
$(document).on( 'found_variation', 'form.cart', function( event, variation ) {
//console.log(variation);
$('.woocommerce-variation-price').addClass('changeprice');
if(variation.image['full_src'])
{
var image_data = variation.image['full_src'];
var image_data_title = variation.image['title'];
var image_data_id = variation.image_id;
$('.product-image-box .swiper-slide-active').html('<a href='+image_data+' title='+image_data_title+' data-id='+image_data_id+' data-fancybox=group><img src='+image_data+' /></a>');
}
var in_stock_status = variation.is_in_stock;
//console.log(in_stock_status);
if(in_stock_status == true){
$('#product_stock_manage_check .in_stock').show();
$('#product_stock_manage_check .out_stock').hide();
}else{
$('#product_stock_manage_check .in_stock').hide();
$('#product_stock_manage_check .out_stock').show();
}
var quantity_data = $('.input-quantity').val();
var product_id_data = $('.product_id_data').val();
var package_without_discount_quantity_field = parseInt($('.package_without_discount_quantity_field').val());
var package_without_discount_quantity_field1 = parseInt($('.package_without_discount_quantity_field').val()) + parseInt(1);
var package_20_discount_quantity_field = parseInt($('.package_20_discount_quantity_field').val());
var package_20_discount_quantity_field1 = parseInt($('.package_20_discount_quantity_field').val()) + parseInt(1);
var package_30_discount_quantity_field = parseInt($('.package_30_discount_quantity_field').val());
var package_30_discount_quantity_field1 = parseInt($('.package_30_discount_quantity_field').val()) + parseInt(1);
var package_40_discount_quantity_field = parseInt($('.package_40_discount_quantity_field').val());
var package_50_discount_quantity_field = parseInt($('.package_50_discount_quantity_field').val());
if(variation.display_regular_price)
{
var after_discount_variation_list_price_nodiscount = variation.display_regular_price;
after_discount_variation_list_price_nodiscount = number_format(after_discount_variation_list_price_nodiscount,2,'.',',');
var after_discount_variation_list_price_20_discount = variation.display_regular_price - ((variation.display_regular_price * 20)/100);
after_discount_variation_list_price_20_discount = number_format(after_discount_variation_list_price_20_discount,2,'.',',');
var after_discount_variation_list_price_30_discount = variation.display_regular_price - ((variation.display_regular_price * 30)/100);
after_discount_variation_list_price_30_discount = number_format(after_discount_variation_list_price_30_discount,2,'.',',');
var after_discount_variation_list_price_40_discount = variation.display_regular_price - ((variation.display_regular_price * 40)/100);
after_discount_variation_list_price_40_discount = number_format(after_discount_variation_list_price_40_discount,2,'.',',');
var after_discount_variation_list_price_50_discount = variation.display_regular_price - ((variation.display_regular_price * 50)/100);
after_discount_variation_list_price_50_discount = number_format(after_discount_variation_list_price_50_discount,2,'.',',');
$('.freediscount').text('1 – '+package_without_discount_quantity_field+' packs');
$('.20discount').text(''+package_without_discount_quantity_field1+' – '+package_20_discount_quantity_field+' packs');
$('.30discount').text(''+package_20_discount_quantity_field1+' – '+package_30_discount_quantity_field+' packs');
$('.40discount').text(''+package_30_discount_quantity_field1+' – '+package_40_discount_quantity_field+' packs');
$('.50discount').text(''+package_50_discount_quantity_field+' +');
$('.freediscountprice').text('$'+after_discount_variation_list_price_nodiscount+'/PK');
$('.20discountprice').text('$'+after_discount_variation_list_price_20_discount+'/PK');
$('.30discountprice').text('$'+after_discount_variation_list_price_30_discount+'/PK');
$('.40discountprice').text('$'+after_discount_variation_list_price_40_discount+'/PK');
$('.50discountprice').text('$'+after_discount_variation_list_price_50_discount+'/PK + free Postage');
if(quantity_data >=1 && quantity_data <=package_without_discount_quantity_field)
{
var final_amount = variation.display_regular_price ;
final_amount = final_amount * quantity_data;
final_amount = number_format(final_amount,2,'.',',');
var after_discount_variation_list_price = variation.display_regular_price;
after_discount_variation_list_price = number_format(after_discount_variation_list_price,2,'.',',');
$('.woocommerce-variation-add-to-cart_variations_discount_price').html('<p>Price: <strong>$'+final_amount+'</strong></p>');
$('#variation_price').val(final_amount);
$('.variation_after_dicount_pack_price').html('');
$('.discount_testdata .variations_discount_50').css('display', 'none');
$('.discount_testdata .variations_discount_40').css('display', 'none');
$('.discount_testdata .variations_discount_35').css('display', 'none');
$('.discount_testdata .variations_discount_30').css('display', 'none');
$('.discount_testdata .variations_discount_20').css('display', 'none');
}
else if(quantity_data <=package_20_discount_quantity_field)
{
var final_amount = variation.display_regular_price - ((variation.display_regular_price * 20)/100);
final_amount = final_amount * quantity_data;
final_amount = number_format(final_amount,2,'.',',');
var after_discount_variation_list_price = variation.display_regular_price - ((variation.display_regular_price * 20)/100);
after_discount_variation_list_price = number_format(after_discount_variation_list_price,2,'.',',');
$('.woocommerce-variation-add-to-cart_variations_discount_price').html('<p>Price: <strong>$'+final_amount+'</strong></p>');
$('#variation_price').val(final_amount);
$('.variation_after_dicount_pack_price').html('<p>After Discount List Price/Pack : <strong>$'+after_discount_variation_list_price+'</strong></p>');
$('.discount_testdata .variations_discount_50').css('display', 'none');
$('.discount_testdata .variations_discount_40').css('display', 'none');
$('.discount_testdata .variations_discount_35').css('display', 'none');
$('.discount_testdata .variations_discount_30').css('display', 'none');
$('.discount_testdata .variations_discount_20').css('display', 'block');
}
else if(quantity_data <=package_30_discount_quantity_field)
{
var final_amount = variation.display_regular_price - ((variation.display_regular_price * 30)/100);
final_amount = final_amount * quantity_data;
final_amount = number_format(final_amount,2,'.',',');
var after_discount_variation_list_price = variation.display_regular_price - ((variation.display_regular_price * 30)/100);
after_discount_variation_list_price = number_format(after_discount_variation_list_price,2,'.',',');
$('.woocommerce-variation-add-to-cart_variations_discount_price').html('<p>Price: <strong>$'+final_amount+'</strong></p>');
$('#variation_price').val(final_amount);
$('.variation_after_dicount_pack_price').html('<p>After Discount List Price/Pack : <strong>$'+after_discount_variation_list_price+'</strong></p>');
$('.discount_testdata .variations_discount_50').css('display', 'none');
$('.discount_testdata .variations_discount_40').css('display', 'none');
$('.discount_testdata .variations_discount_35').css('display', 'none');
$('.discount_testdata .variations_discount_30').css('display', 'block');
$('.discount_testdata .variations_discount_20').css('display', 'none');
}
else if(quantity_data <=package_40_discount_quantity_field)
{
var final_amount = variation.display_regular_price - ((variation.display_regular_price * 40)/100);
final_amount = final_amount * quantity_data;
final_amount = number_format(final_amount,2,'.',',');
var after_discount_variation_list_price = variation.display_regular_price - ((variation.display_regular_price * 40)/100);
after_discount_variation_list_price = number_format(after_discount_variation_list_price,2,'.',',');
$('.woocommerce-variation-add-to-cart_variations_discount_price').html('<p>Price: <strong>$'+final_amount+'</strong></p>');
$('#variation_price').val(final_amount);
$('.variation_after_dicount_pack_price').html('<p>After Discount List Price/Pack : <strong>$'+after_discount_variation_list_price+'</strong></p>');
$('.discount_testdata .variations_discount_50').css('display', 'none');
$('.discount_testdata .variations_discount_40').css('display', 'block');
$('.discount_testdata .variations_discount_35').css('display', 'none');
$('.discount_testdata .variations_discount_30').css('display', 'none');
$('.discount_testdata .variations_discount_20').css('display', 'none');
}
else if(quantity_data <=package_50_discount_quantity_field)
{
var final_amount = variation.display_regular_price - ((variation.display_regular_price * 50)/100);
final_amount = final_amount * quantity_data;
final_amount = number_format(final_amount,2,'.',',');
var after_discount_variation_list_price = variation.display_regular_price - ((variation.display_regular_price * 50)/100);
after_discount_variation_list_price = number_format(after_discount_variation_list_price,2,'.',',');
$('.woocommerce-variation-add-to-cart_variations_discount_price').html('<p>Price: <strong>$'+final_amount+'</strong></p>');
$('#variation_price').val(final_amount);
$('.variation_after_dicount_pack_price').html('<p>After Discount List Price/Pack : <strong>$'+after_discount_variation_list_price+'</strong></p>');
$('.discount_testdata .variations_discount_50').css('display', 'block');
$('.discount_testdata .variations_discount_40').css('display', 'none');
$('.discount_testdata .variations_discount_35').css('display', 'none');
$('.discount_testdata .variations_discount_30').css('display', 'none');
$('.discount_testdata .variations_discount_20').css('display', 'none');
}
else
{
var final_amount = variation.display_regular_price - ((variation.display_regular_price * 50)/100);
final_amount = final_amount * quantity_data;
final_amount = number_format(final_amount,2,'.',',');
var after_discount_variation_list_price = variation.display_regular_price - ((variation.display_regular_price * 50)/100);
after_discount_variation_list_price = number_format(after_discount_variation_list_price,2,'.',',');
$('.woocommerce-variation-add-to-cart_variations_discount_price').html('<p><strong>$'+final_amount+'</strong></p>');
$('#variation_price').val(final_amount);
$('.variation_after_dicount_pack_price').html('<p>After Discount List Price/Pack : <strong>$'+after_discount_variation_list_price+'</strong></p>');
$('.discount_testdata .variations_discount_50').css('display', 'block');
$('.discount_testdata .variations_discount_40').css('display', 'none');
$('.discount_testdata .variations_discount_35').css('display', 'none');
$('.discount_testdata .variations_discount_30').css('display', 'none');
$('.discount_testdata .variations_discount_20').css('display', 'none');
}
}
else
{
if(quantity_data >=5 && quantity_data <=9)
{
var final_amount = variation.display_regular_price - ((variation.display_regular_price * 20)/100);
final_amount = final_amount * quantity_data;
final_amount = number_format(final_amount,2,'.',',');
var after_discount_variation_list_price = variation.display_regular_price - ((variation.display_regular_price * 20)/100);
after_discount_variation_list_price = number_format(after_discount_variation_list_price,2,'.',',');
$('.woocommerce-variation-add-to-cart_variations_discount_price').html('<p>Price: <strong>$'+final_amount+'</strong></p>');
$('#variation_price').val(final_amount);
$('.variation_after_dicount_pack_price').html('<p>After Discount List Price/Pack : <strong>$'+after_discount_variation_list_price+'</strong></p>');
}
else if(quantity_data >=10 && quantity_data <=24)
{
var final_amount = variation.display_regular_price - ((variation.display_regular_price * 30)/100);
final_amount = final_amount * quantity_data;
final_amount = number_format(final_amount,2,'.',',');
var after_discount_variation_list_price = variation.display_regular_price - ((variation.display_regular_price * 30)/100);
after_discount_variation_list_price = number_format(after_discount_variation_list_price,2,'.',',');
$('.woocommerce-variation-add-to-cart_variations_discount_price').html('<p>Price: <strong>$'+final_amount+'</strong></p>');
$('#variation_price').val(final_amount);
$('.variation_after_dicount_pack_price').html('<p>After Discount List Price/Pack : <strong>$'+after_discount_variation_list_price+'</strong></p>');
}
else if(quantity_data >=25 && quantity_data <=49)
{
var final_amount = variation.display_regular_price - ((variation.display_regular_price * 35)/100);
final_amount = final_amount * quantity_data;
final_amount = number_format(final_amount,2,'.',',');
var after_discount_variation_list_price = variation.display_regular_price - ((variation.display_regular_price * 35)/100);
after_discount_variation_list_price = number_format(after_discount_variation_list_price,2,'.',',');
$('.woocommerce-variation-add-to-cart_variations_discount_price').html('<p>Price: <strong>$'+final_amount+'</strong></p>');
$('#variation_price').val(final_amount);
$('.variation_after_dicount_pack_price').html('<p>After Discount List Price/Pack : <strong>$'+after_discount_variation_list_price+'</strong></p>');
}
else if(quantity_data >=50 && quantity_data <=99)
{
var final_amount = variation.display_regular_price - ((variation.display_regular_price * 40)/100);
final_amount = final_amount * quantity_data;
final_amount = number_format(final_amount,2,'.',',');
var after_discount_variation_list_price = variation.display_regular_price - ((variation.display_regular_price * 40)/100);
after_discount_variation_list_price = number_format(after_discount_variation_list_price,2,'.',',');
$('.woocommerce-variation-add-to-cart_variations_discount_price').html('<p>Price: <strong>$'+final_amount+'</strong></p>');
$('#variation_price').val(final_amount);
$('.variation_after_dicount_pack_price').html('<p>After Discount List Price/Pack : <strong>$'+after_discount_variation_list_price+'</strong></p>');
}
else if(quantity_data >=100)
{
var final_amount = variation.display_regular_price - ((variation.display_regular_price * 50)/100);
final_amount = final_amount * quantity_data;
final_amount = number_format(final_amount,2,'.',',');
var after_discount_variation_list_price = variation.display_regular_price - ((variation.display_regular_price * 50)/100);
after_discount_variation_list_price = number_format(after_discount_variation_list_price,2,'.',',');
$('.woocommerce-variation-add-to-cart_variations_discount_price').html('<p>Price: <strong>$'+final_amount+'</strong></p>');
$('#variation_price').val(final_amount);
$('.variation_after_dicount_pack_price').html('<p>After Discount List Price/Pack : <strong>$'+after_discount_variation_list_price+'</strong></p>');
}
else
{
var final_amount = variation.display_regular_price ;
final_amount = final_amount * quantity_data;
final_amount = number_format(final_amount,2,'.',',');
var after_discount_variation_list_price = variation.display_regular_price;
after_discount_variation_list_price = number_format(after_discount_variation_list_price,2,'.',',');
$('.woocommerce-variation-add-to-cart_variations_discount_price').html('<p>Price: <strong>$'+final_amount+'</strong></p>');
$('#variation_price').val(final_amount);
$('.variation_after_dicount_pack_price').html('');
}
}
});
function number_format (number, decimals, dec_point, thousands_sep) {
// Strip all characters but numerical ones.
number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
var n = !isFinite(+number) ? 0 : +number,
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
s = '',
toFixedFix = function (n, prec) {
var k = Math.pow(10, prec);
return '' + Math.round(n * k) / k;
};
// Fix for IE parseFloat(0.55).toFixed(0) = 0;
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
if (s[0].length > 3) {
s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
}
if ((s[1] || '').length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1).join('0');
}
return s.join(dec);
}
});