有没有办法巩固这个功能?我有大约50个类似的函数,这似乎是获取和设置这些值的一种非常麻烦的方法。
所有函数的格式都是相同的:当它“获取”的任何值被更改时,它会被触发,并且基于主要元素的值(在这种情况下是{{1}) })加上一些其他元素的值,它设置目标元素(即Fabric_Type
)的值。大多数函数都获得相同的5-10个元素(即Fabric_Thickness
或Item
)的值,并在这些元素中寻找相同的值(即开拓者,夹克) ,外套)。我已经设置了数组,其中包含每个元素的所有值(即Lining
,
$Fabric_Type = array("Cashmere","Silk","Satin");
等。) :-)
我正在尝试(伪代码):
$Item = array("Blazers","Dresses","Jackets","Outerwear");
jQuery的:
If ('Item' != Blazer, Jacket OR Outerwear AND 'Lining'!=0) OR If ('Item'=Blazer, Jacket OR Outerwear AND 'Lining'=0){'Fabric_Thickness'=2}
If ('Item' = Blazer, Jacket OR Outerwear AND 'Lining'=!0) {'Fabric_Thickness'=3}
答案 0 :(得分:2)
在名为isThickerFabric的change
块之外设置一个函数(或者域名最正确的名称):
var isThickerFabric = function() {
var item = $("[name=Item]").val();
return item == "Blazer" || item == "Jacket" || item == "Outerwear";
}
var hasLining = function() {
var lining = $("[name=Lining]").val();
return lining != "0";
}
然后,您可以通过以下两种方式之一简化方法:
$("[name=Item],[name=Fabric_Type],[name=Lining],[name=Fabric_Construction]").change(function(){
if ( $("[name=Fabric_Type]").val() === "Satin" ) {
var fabricThicknessElement = $('[name=Fabric_Thickness]');
if ( isThickerFabric() && !hasLining || !isThickerFabric() && hasLining ) {
fabricThicknessElement.val('2');
} else if ( isThickerFabric() && hasLining() ) {
fabricThicknessElement.val('3');
} else {
fabricThicknessElement.val('1');
}
}
});
或者,有时候,当我在这里有几个二进制属性时,我觉得“保持得分”很有价值:
$("[name=Item],[name=Fabric_Type],[name=Lining],[name=Fabric_Construction]").change(function(){
if ( $("[name=Fabric_Type]").val() === "Satin" ) {
var fabricThicknessElement = $('[name=Fabric_Thickness]');
var thicknessScore = 1;
if ( hasLining() ) {
thicknessScore++;
}
if ( isThickerFabric() ) {
thicknessScore++;
}
$('[name=Fabric_Thickness]').val(thicknessScore);
}
});