2013-10-04 64 views
0

由於標題暗示我正在生成一個if驗證腳本。所以if語句將根據給定的數組進行調整(應該作爲一個配置文件)。
讓我給你舉個例子:是否可以通過變量驗證生成if語句?

if(sTime == "12:00:00") 
{ 
    //code to happen when it's 12 o'clock 
} 

的配置輸入應該是 「12:00:00」。沒關係。但是如果在配置文件中有更多次呢?
有了2倍的if語句應該是:

if(sTime == "12:00:00" || sTime == "12:30:00") 
{ 
    //code to happen when it's 12 o'clock 
} 



讓這個自動發生,我自己生成根據配置輸入驗證。
這裏是我的生成代碼:

var tijd = ["12:00:00", "12:30:00"]; 
var validatie = ''; 

var length = tijd.length; 
$.each(tijd, function(key, value) 
{ 
    if(length != key+1) 
    { 
     if(length > 1) 
     { 
      validatie += 'sTime =="' + value + '" || '; 
     } 
     else 
     { 
      validatie += 'sTime =="' + value + '"'; 
     } 
    } 
    else 
    { 
     validatie += 'sTime =="' + value + '"'; 
    } 
}) 

在這種情況下,我的驗證的值將是:表準時==「12:00:00」 || sTime ==「12:30:00」
看起來應該是這樣!但是,我如何將其用作代碼?它現在被存儲爲一個字符串。

if(validatie) 
{ 
    //will only check if the array exists 
} 

我該如何超越這個變量?
任何幫助表示讚賞!

jsFiddle

這是所有在jQuery中,可能你沒有注意到

回答

3

如果預期驗證是字面上「的sTime相匹配的價值該數組中的元素之一」,那麼你可以只這樣做:

if(tijd.indexOf(sTime) > -1) { 
    // code here 
} 

或者,如果由於某種原因,你的瀏覽器不支持,有一個jQuery函數:

if($.inArray(sTime, tijd)) { 
    // code here 
} 

不應該有任何需要生成if語句條件作爲字符串,然後嘗試執行它作爲代碼的一部分。

如果你絕對沒得(我會強烈建議這樣做),你可以使用eval

if(eval(validatie)) { 
    // code here 
} 
+0

的IndexOf着,當然謝謝!偉大的你給更多的可能性! :)因爲我寧願不使用eval函數,因爲你也建議。 – nkmol