有没有办法整合这个功能?我有大约 50 个类似的函数,这似乎是获取和设置这些值的一种非常麻烦的方法。
所有函数的格式都是相同的:当它“获取”的任何值发生更改时都会触发它,并且基于主要元素的值 (在本例中为 Fabric_Type
)加上一些其他元素的值,它设置了目标元素的值(即Fabric_Thickness
)。大多数函数都会获取相同的 5 - 10 个元素的值(即 Item
或 Lining
),并在这些元素中查找相同的值元素(即西装外套、夹克、外套)。我已经设置了每个元素的所有值的数组(即 $Fabric_Type = array("Cashmere","Silk","Satin");
,
$Item = array("西装外套","连衣裙","夹克","外套");
, 等等) :-)
我试图(以伪代码)是:
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}
jQuery:
$("[name=Item],[name=Fabric_Type],[name=Lining],[name=Fabric_Construction]").change(function(){
if( $("[name=Fabric_Type]").val() === "Satin" || $("[name=Item]").val() === "Silk"){
if( $("[name=Item]").val() != "Blazer" && $("[name=Item]").val() != "Jacket" && $("[name=Item]").val() != "Outerwear" && "[name=Lining]").val() != "0") ||
( $("[name=Item]").val() === "Blazer" || $("[name=Item]").val() === "Jacket" || $("[name=Item]").val() === "Outerwear" && "[name=Lining]").val() === "0"){
$('[name=Fabric_Thickness]').val('2');
} if( $("[name=Item]").val() === "Blazer" || $("[name=Item]").val() === "Jacket" || $("[name=Item]").val() === "Outerwear" && "[name=Lining]").val() != "0" {
$('[name=Fabric_Thickness]').val('3');
} else {
$('[name=Fabric_Thickness]').val('1');
}
}
});
最佳答案
在 change
block 之外设置一个名为 isThickerFabric 的函数(或任何最适合该域的名称):
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');
}
}
});
或者,有时,当我像您一样有几个二进制属性时,我发现“记分”很有值(value):
$("[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);
}
});
关于jquery - 简化此函数以获取和设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15802945/