jquery - 简化此函数以获取和设置值

标签 jquery get set

有没有办法整合这个功能?我有大约 50 个类似的函数,这似乎是获取和设置这些值的一种非常麻烦的方法。

所有函数的格式都是相同的:当它“获取”的任何值发生更改时都会触发它,并且基于主要元素的值 (在本例中为 Fabric_Type )加上一些其他元素的值,它设置了目标元素的值(即Fabric_Thickness)。大多数函数都会获取相同的 5 - 10 个元素的值(即 ItemLining),并在这些元素中查找相同的值元素(即西装外套、夹克、外套)。我已经设置了每个元素的所有值的数组(即 $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/

相关文章:

c++ - 如何发送 POST 请求并接收 GET 响应

javascript - 如何将 # 符号作为 URL 中 GET 查询字符串的一部分传递?

python - 作为字符串列表的集合的所有可能组合

java - Oracle 不同与 java (cqengine/set) : whose leads to better performances?

python - 使用集合创建列会复制集合 n 次

javascript - 有没有办法在phonegap angularjs项目中实现拖放?

javascript - 如何在鼠标悬停在第一个 div 上时显示两个 div 并在鼠标移开时隐藏相同的两个 div

html - 获取 url 时如何强制 Web 浏览器使用 POST?

javascript - jQuery 仅适用于浏览器首次启动

jquery - 使用 JQuery ajax post 使用 WCF/REST 服务