2013-09-16 28 views
1

我寫了一個檢查輸入字段的長度,並確保它是適當的數額。它變得複雜,因爲它需要允許9個數字或1個字母和5個數字。我現在擁有它的方式工作,但代碼傷害了我的大腦,我想看看更優雅的解決方案會是什麼樣子,也許使用三元和/或開關?更有效的方法來寫這個if/else

所以不那麼漂亮的一小部分,我在現在的地方:

if (len !== 9) { 
    if (len == 1) { 
     y.hide(); 
     n.show(); 
     valInput.text("You need 8 more numbers"); 
    } else { 
     if (len == 2) { 
      y.hide(); 
      n.show(); 
      valInput.text("You need 7 more numbers"); 
     } else { 
      if (len == 3) { 
       y.hide(); 
       n.show(); 
       valInput.text("You need 6 more numbers"); 
      } else { 
       if (len == 4) { 
        y.hide(); 
        n.show(); 
        valInput.text("You need 5 more numbers"); 
       } else { 
        if (len == 5) { 
         y.hide(); 
         n.show(); 
         valInput.text("You need 4 more numbers"); 
        } else { 
         if (len == 6) { 
          y.hide(); 
          n.show(); 
          valInput.text("You need 3 more numbers"); 
         } else { 
          if (len == 7) { 
           y.hide(); 
           n.show(); 
           valInput.text("You need 2 more numbers"); 
          } else { 
           if (len == 8) { 
            y.hide(); 
            n.show(); 
            valInput.text("You need 1 more number"); 
           } else { 
            if (len > 9) { 
             y.hide(); 
             n.show(); 
             valInput.text("Order number must be 9 digits"); 
             // gt 9 
            } 
            // 8 
           } 
           // 7 
          } 
          // 6 
         } 
         // 5 
        } 
        // 4 
       } 
       // 3 
      } 
      // 2 
     } 
     // 1 
    } 
    // this is not equal to 9 
} 

UPDATE

感謝所有的答案!很多好東西,我玩了一段時間後會接受我的最愛。爲了闡明滿足適當要求會發生什麼,然後提交按鈕淡入,直到驗證。不知道這是相關的,但會提及該函數還運行作爲「活型」所以每個.keyup()

+4

嘗試使用'switch'。順便說一句,你可以合併它們到一個單一的if..else ...:if(len <9){ y.hide(); n.show(); valInput.text(「你需要」+(9 - len)+「more numbers」); } – zsong

+1

教科書何時使用'switch'的示例:D – tymeJV

+2

確實使用'switch',但即使沒有它,爲什麼這樣的怪物?還有一個'else if' ... – Jon

回答

5

如果你不「不想使用開關,你可以做這樣的事情:

if (len < 9) { 
    y.hide(); 
    n.show(); 
    valInput.text("You need " + (9 - len) + " more number(s)"); 
} 
else if (len > 9) { 
    y.hide(); 
    n.show(); 
    valInput.text("Order number must be 9 digits"); 
} 
else { 
    // all good here... 
} 

如果你不喜歡"number(s)"部分,只是檢查,如果len不爲1,並添加"s""number"

+0

+1,我會使用'if(len && len <9)'來確保它是一個非零數字。 –

+0

@SheikhHeera同意,但0 <9,我們假設'len'是從元素計數派生的適當整數。 – Shomz

+0

@Shomz爲什麼有'else'呢? – progrenhard

3

後返回與統計信息在你的具體情況它看起來像驗證的東西很簡單像這樣:

function validate(len) { 
    var msg; 
    if (len == 9) 
     return true; 
    y.hide(); /* no need to duplicate these calls in each condition */ 
    n.show(); 
    if (len < 9) 
     msg = 'You need ' + (9-len) + ' more number' + (len == 1 ? '' : 's') + '.'; 
    else 
     msg = 'You entered ' + (len-9) + ' number' + (len == 1 ? '' : 's') + ' too many.; 
    valInput.text(msg); 
    return false; 

} 

評論:===應保存在需要的時候,而不是僅僅成爲幻想!不幸的是,很多人都被教導要避免雙重平等,而不是真正理解其有用和有用的額外功能,如類型轉換。在這種情況下,沒有任何理由使用三重平等。

但總的來說,比如,如果你的條件語句的順序做了超過警戒更顯著只能通過連續的整數變化的消息序列,然後用switch ...

switch (len) { 
case 1: 

/* handle this case */; 
    y.hide(); 
    n.show(); 
    valInput.text("You need 8 more numbers"); 
    break; 
/* make sure to end case 1 with a break; */ 

case 2: 
    y.hide(); 
    n.show(); 
    valInput.text("You need 7 more numbers"); 
    break; 
/* make sure to end every case with a break; */ 

... 
} 
4

由於這些看起來都是一樣的,爲什麼不使用這樣的:

if (len !== 9) { 
    var diff = 9 - len; 
    var value = (0 < diff ? "You need " + diff + " more numbers" : "Order number must be 9 digits"); 
    y.hide(); 
    n.show(); 
    valInput.text(value); 
} 
+1

+1,但也有'> 9'部分。 – Jon

+0

@Jon很好。我已經更新了答案。 – insertusernamehere

+0

'if(len!== 9)對於0'爲真,這就是爲什麼使用'if(len && len <9)'更好。 –

2

您可以簡化這:

if (len !== 9) { 
     valInput.text("You need " + (9 -len) + " more numbers"); 
     y.hide(); 
     n.show(); 
    } 
2

爲什麼即使使用switch或一個巨大的if

if(len == 9){ 
    // do stuff. 
}else{ 
    y.hide(); 
    n.show(); 
    if(9 > len) 
     valInput.text("You need " + (len - 9) + " less numbers"); 
    else 
     valInput.text("You need " + (9 - len) + " more numbers"); 
    valInput.text("Order number must be 9 digits"); 
} 

就宣佈你要那麼concatenate字符串值的範圍。

4

我想你應該計算通過JavaScript其餘的字符,因爲這是在唯一的區別所有其他的if else分支,所以你可以做這樣的事情,並會更可讀:

if (len !== 9) { 
    y.hide(); 
    n.show(); 
    if (len > 9) { 
     valInput.text("Order number must be 9 digits"); 
    } 
    else{ 
     var remaining = 9 - len; 
     valInput.text("You need " + remaining + " more numbers"); 
    } 
} 
+0

一切都很好,除了我會多走一步並擺脫剩下的變量 - 這真的不需要。 – Shomz

0

的最短的替代方案:

(y.hide(), n.show(), valInput.text(
    len < 9 && "You need " + (9-len) + " more digits" 
    || len > 9 && "too many ("+ (len-9) + ") digits" 
    || "ok!" 
)); 
相關問題