2015-02-05 66 views
1

我有多个下拉菜单,即part_no,part_category,品牌和型号。我正在显示库存中的车辆部件数量。有没有一种优雅的方式来检查多个条件?

鉴于当我通过向下拉菜单中提供更多值而变得更加具体时,必须显示较少类型的零件。 (就像一个过滤)

,我试图模拟天生在这个网站上找到的下拉菜单一个很好的例子:http://www.sgcarmart.com/used_cars/listing.php?MMO=Mini&RPG=20&MOD=Austin

是否有这样做的检查(通过所有可能的组合)的一个更好的办法,而不是这样做:

  //Values from my dropdown menus 
      var carmake= $('#car_make').val(); 
      var carmodel= $('#car_model').val(); 
      var partname= $('#part_name').val(); 
      var partcategory= $('#part_category').val(); 

      if(carmake==data['carmake']) 
      { 
      //do something 
      } 
      else if (carmake==data['carmake'] && partname==data['partname']) 
      { 
      //do something   
      } 
      else if (carmodel==data['carmodel'] && partname==data['partname']) 
      { 
      //do something   
      } 
      else if (carmodel==data['carmodel'] && partname==data['partname'] &&partcategory==data['partcategory']) 
      { 
      //do something   
      } else if (carmodel==data['carmodel'] && partname==data['partname'] &&partcategory==data['partcategory' &&partname==data['partname']) 
      { 
      //do something   
      } 
      . 
      . 
      . 
      . 
      .    
+3

第一个'else if'将永远不会执行。只有当carmake == data ['carmake']'为false时才执行。但如果这是错误的,那么carmake == data ['carmake'] && anything'也是如此。 – Barmar

+0

嵌套'if'是你的朋友! –

+0

@Barmar是啊,这正是我想要的。如果组合匹配。它应该立即退出检查其他各种条件,如果语句 – user3659911

回答

3

把所有的测试值在一个对象的属性名称是一样data。然后遍历所有属性以查看它们是否全部相同:

var search = { 
    carmake: $("#car_make").val(), 
    carmodel: $("#car_model").val(), 
    partname: $("#part_name").val(), 
    partcategory: $("#part_category").val() 
}; 

var match = true; 
$.each(search, function(prop, value) { 
    if (value !== "" && value != data[prop]) { // only compare if the dropdown was selected 
     match = false; 
     return false; // break out of the loop 
    } 
}); 

if (match) { 
    // do something 
} 
+0

@ user3659911您尝试进行的编辑是错误的。没有必要从迭代函数返回true; '.each()'保持循环,除非函数显式返回'false'。 – Barmar

+0

感谢您的回答!我在源代码中添加了您的代码。当组合为false时,匹配将被设置为false。找到组合后,匹配必须设置为true。为了执行if(match)语句。 – user3659911

+0

'match'在循环之前被初始化为'true'。如果'data'不匹配,它只会被设置为'false'。 – Barmar

相关问题