我正在建立一个现有的woocommerce wordpress扩展,我正在将产品变体(大小,颜色等)下拉菜单转换成无线电盒。棘手的是,当用户从下拉列表中选择一个选项时,它会触发一些通过ajax自动更新产品库存和价格的东西。
我用它将输入转换为无线电(来自here):
$('.variations select').each(function(i, select){
var $select = jQuery(select);
$select.find('option').each(function(j, option){
var $option = jQuery(option);
// Create a radio:
var $radio = jQuery('<input type="radio" />');
// Set name and value:
$radio.attr('name', $select.attr('name')).attr('value', $option.val());
// Set checked if the option was selected
if ($option.attr('selected')) $radio.attr('checked', 'checked');
// Insert radio before select box:
$select.before($radio);
$radio.wrap('<div class="vari-option fix" />');
// Insert a label:
$radio.before(
$("<label />").attr('for', $select.attr('name')).text($option.text())
);
});
然后我用过这个
$(':radio').click(function(){
$(this).parent().parent().find('label').removeClass('checked');
$(this).siblings('label').addClass('checked');
$choice = $(this).attr('value');
$('.variations select option[value=' + $choice + ']').attr('selected',true);
});
这样,当选择一个无线电时,它会在下拉选项上镜像该事件。这很好,但它不会触发产品信息的刷新。我猜测更改下拉选项的“选定”属性与物理点击同一选项之间存在差异。什么事件的猜测可能会触发我没有考虑到的ajax功能?理想情况下,解决方案不涉及修改woocommerce的原始代码?我尝试在select选项上使用.click(),但没有区别。
答案 0 :(得分:2)
以编程方式更改元素的值并不会触发change
事件,我会假设以selected
编程方式设置<option>
属性/属性也不会&# 39; t触发包含change
元素的<select>
事件。
幸运的是,您可以使用jQuery以编程方式轻松触发该事件:
$('.variations select option[value=' + $choice + ']').attr('selected',true).parent().trigger('change');
.parent()
调用返回包含<select>
元素的jQuery对象,然后.trigger('change')
触发绑定到该对象上change
事件的任何事件处理程序。