if if / else if语句不那么笨拙。新手在这里

时间:2011-10-05 10:26:27

标签: javascript jquery refactoring

虽然这是在Breezingforms为Joomla创建的表单,但我的问题更多的是一般的javascript问题。我是javascript的新手,所以希望有人可以轻松回答这个问题。这是在初始化表单时调用的。

我在选择列表对象中使用javascript循环来隐藏/取消隐藏表单的各个部分,具体取决于选择列表选项。我试图让if / else if语句不那么笨拙。我确信有一种方法可以让它更简洁,更简洁,但作为一个新手,我还是无法弄明白。

在旁注(目前不是那么重要,但它会是这样),我想将此脚本用于其他选择列表调用,但有微小的变化。我仍然不太清楚重用代码。如果有人对此有任何意见,我们将不胜感激。

顺便说一下,我更喜欢jQuery的新手,所以如果你去那里,那就太好了! :)

var selListVal = "";
var selListInput =  JQuery("[name=\"mySelectionList[]\"]");
for (var i = 0; i < selListInput.length; i++)
 if (selListInput[i].value) {
  if (selListVal != "") selListVal += ",";
   selListVal += selListInput[i].value;
 }
    if( selListVal == "myselection01" ){
      ToggleFields('on', 'section', 'mysection01A', DeactivateField);
      ToggleFields('on', 'section', 'mysection01B', DeactivateField);
      } 
    else if( selListVal == "myselection02" ){
      ToggleFields('on', 'section', 'mysection01A', DeactivateField);
      ToggleFields('on', 'section', 'mysection01B', DeactivateField); 
      ToggleFields('on', 'section', 'mysection02A', DeactivateField);
      ToggleFields('on', 'section', 'mysection02B', DeactivateField);
      }
    else if( selListVal == "myselection03" ){
      ToggleFields('on', 'section', 'mysection01A', DeactivateField);
      ToggleFields('on', 'section', 'mysection01B', DeactivateField);
      ToggleFields('on', 'section', 'mysection02A', DeactivateField);
      ToggleFields('on', 'section', 'mysection02B', DeactivateField);
      ToggleFields('on', 'section', 'mysection03A', DeactivateField);
      ToggleFields('on', 'section', 'mysection03B', DeactivateField);
      }
     else {
      ToggleFields('off', 'section', 'mysection01A', DeactivateField);
      ToggleFields('off', 'section', 'mysection01B', DeactivateField);
      ToggleFields('off', 'section', 'mysection02A', DeactivateField);
      ToggleFields('off', 'section', 'mysection02B', DeactivateField);
      ToggleFields('off', 'section', 'mysection03A', DeactivateField);
      ToggleFields('off', 'section', 'mysection03B', DeactivateField);
      }

5 个答案:

答案 0 :(得分:2)

这样的事情怎么样?

var num = parseInt(selListVal.replace('myselection', ''));

if(num > 0){
    ToggleFields('on', 'section', 'mysection01A', DeactivateField);
    ToggleFields('on', 'section', 'mysection01B', DeactivateField);
}
if(num > 1){
    ToggleFields('on', 'section', 'mysection02A', DeactivateField);
    ToggleFields('on', 'section', 'mysection02B', DeactivateField);
}
if(num > 2){
    ToggleFields('on', 'section', 'mysection03A', DeactivateField);
    ToggleFields('on', 'section', 'mysection03B', DeactivateField);
}

或通过user968951

说明这个想法
var num = parseInt(selListVal.replace('myselection', ''));

for (var x=1; x<=num; x++){
    ToggleFields('on', 'section', 'mysection0' + x + 'A', DeactivateField);
    ToggleFields('on', 'section', 'mysection0' + x + 'B', DeactivateField);
}

答案 1 :(得分:2)

您可以使用switch语句并省略break。通过这种方式,还将执行以下案件陈述。

switch(selListVal) {
    case "myselection03":
       ToggleFields('on', 'section', 'mysection03A', DeactivateField);
       ToggleFields('on', 'section', 'mysection03B', DeactivateField);
    case "myselection02":
        ToggleFields('on', 'section', 'mysection02A', DeactivateField);
        ToggleFields('on', 'section', 'mysection02B', DeactivateField);
    default:
        ToggleFields('on', 'section', 'mysection01A', DeactivateField);
        ToggleFields('on', 'section', 'mysection01B', DeactivateField);
}

答案 2 :(得分:0)

您可以拆分字符串获取数字。然后你可以使用for循环来切换所有字段。

答案 3 :(得分:0)

我的建议是通过将类分配给您希望激活/停用的特定组来利用jQuery选择器。您可以为单个项目分配多个类,这样您就可以定义哪些字段应该以您希望的任何组合显示。例如:

<input type="textbox" class="selection myselection02 myselection03" />
<input type="textbox" class="selection myselection01 myselection03" />
<input type="textbox" class="selection myselection01 myselection02" />

然后你可以简单地使用这些行:

$(".selection").hide()
$("." + selListVal).show();

仅显示您想要的字段。

答案 4 :(得分:0)

我开始时使用switch .. case编写类似于@Alex的答案,并省略break;语句。

然而,虽然这很简洁并且缩短了你的代码,但它确实有缺点,它可能变得非常难以维护 - 如果你发现你需要添加一些应该适用的东西,比如选项2,那么你最终不得不重写整个事情。因此,除非你知道这是留下的方式,否则我会反对这一点,即使它很整洁。

更好的解决方案是调整您的部分和选择ID /值,以便选择的值包含将要切换的部分的ID。这样你根本不需要做任何条件代码;只需解析选择值并切换它告诉您的部分。