Jquery 根据所选的变量选择限制属性
我正在处理一个场景,在这个场景中,我有一个可变的产品,并且我正试图根据用户的选择禁用该可变产品的选择选项。您会注意到,我在中有多个高度和宽度值。我想实现的是,当用户选择特定高度时,只显示可用的宽度。高度也是如此,如果高度是一定量,我需要限制可用的宽度 最初,我认为如果产品是单个产品,并且产品类别与我针对此特定功能的目标项匹配,我可以将一段JavaScript排队运行 然后,我使用基本jQuery来监听高度和宽度表单项的变化事件Jquery 根据所选的变量选择限制属性,jquery,wordpress,woocommerce,Jquery,Wordpress,Woocommerce,我正在处理一个场景,在这个场景中,我有一个可变的产品,并且我正试图根据用户的选择禁用该可变产品的选择选项。您会注意到,我在中有多个高度和宽度值。我想实现的是,当用户选择特定高度时,只显示可用的宽度。高度也是如此,如果高度是一定量,我需要限制可用的宽度 最初,我认为如果产品是单个产品,并且产品类别与我针对此特定功能的目标项匹配,我可以将一段JavaScript排队运行 然后,我使用基本jQuery来监听高度和宽度表单项的变化事件 $( "#width" ).change(ev
$( "#width" ).change(event, function(event) {
console.log(event);
console.log(this);
console.log($(this));
currentWidth = parseInt($(this).val().replace('"',''));
console.log(currentWidth);
isWidthSet = true;
if(currentWidth == 80){
//width is 80, must restrict max height.
if(isHeightSet == false){
$("#height").children().each(function(){
if(parseInt($(this).val().replace('"','')) > 47){
console.log(this);
console.log($(this));
$(this).removeClass('enabled');
$(this).removeClass('attached');
$(this).remove();
$(this).attr('disabled','disabled');
}
});
}else{
//set alert somewhere.
}
}
});
如果选择了不同的表单选项,则会触发此操作。问题在于,每次在变体表单中更改属性值时,都会有其他功能重新生成变体选项
虽然我知道这是变体设计的一部分,但我正在寻找一种解决方案,允许我根据用户的选择禁用这些选项。由于我们使用的是测量值,因此根据可用测量值的数量创建变化并限制高度和宽度将非常麻烦。这就是为什么我看到了一个程序化的解决方案
我还尝试为变体表单连接WooCommerce的JavaScript事件,认为这可能是在我第一次使用上述方法并重置表单后触发的
$( ".variations_form" ).on( "woocommerce_variation_select_change", function () {
// Fires whenever variation selects are changed
});
这种修改可用变体属性的方法也会失败,因为在类似的Javascript将属性设置为禁用后,这些属性会被修改
为了以编程方式隐藏变量属性变量,我是否应该查看其他JS钩子或设置
任何建议都将不胜感激。我仔细阅读了 知道WooCommerce正在与CMS中特定产品的属性和变化数据集进行交互,
onfinvariation
让我找到了一个某种程度上可以接受的解决方案,实现了我想要做的事情
看到WooCommerce查看用户选择,根据变体的配置方式查找适当的属性值,并在用户更改变体选择时显示这些值,就好像这是在重置表单一样
$( ".variations_form" ).on( "woocommerce_variation_select_change", function () {
// Fires whenever variation selects are changed
});
相反,我将事件挂钩更改为使用reset\u data
而不是woocommerce\u variation\u select\u change
新代码如下:
var currentWidth = 0;
var currentHeight = 0;
var isWidthSet = false;
var isHeightSet = false;
$( ".variations_form" ).on( "reset_data", function () {
// Fires whenever variation selects are changed
console.log("THIS IS WORKING JS HOOK.");
console.log(event);
console.log(this);
console.log($(this));
currentWidth = parseInt($('#width').val().replace('"',''));
console.log(currentWidth);
isWidthSet = true;
if(currentWidth == 80){
//width is 80, must restrict max height.
if(isHeightSet == false){
$("#height").children().each(function(){
if(parseInt($(this).val().replace('"','')) > 47){
console.log(this);
console.log($(this));
//$(this).removeClass('enabled');
//$(this).removeClass('attached');
//$(this).remove();
//$(this).attr('disabled','disabled');
$(this).css('display','none');
}
});
}else{
//set alert somewhere.
}
}
} );
您会注意到,我只是关闭了它们的可见性,以便用户无法选择我要消除的值
这只是一个概念证明,目前还没有经过全面测试,但我愿意留下这个问题,以便其他人可以提供任何更好的方法来实现所需的功能
谢谢,永远感谢你的洞察力