2014-01-27 49 views
1

我正在驗證JavaScript中的註冊表單。我決定添加紅色文字樣式來識別錯誤的輸入。 我有兩個數組:fail[],其中包含每個失敗輸入的消息,並且lblcol[]具有不同的標籤ID。表單驗證和數組,如何約定多個if和else語句?

var fail = new Array(); 

fail[0] = validateNickname(form.form_nickname.value); 
fail[1] = validatePassword(form.form_password.value); 
fail[2] = validateFirstname(form.form_firstname.value); 
fail[3] = validateLastname(form.form_lastname.value); 
fail[4] = validateEmail(form.form_email.value); 

var lblcol = document.querySelectorAll("#lbl0, #lbl1, #lbl2, #lbl3, #lbl4"); 

if (fail[0]!="") 
lblcol[0].style.color="red"; 
else 
lblcol[0].style.color="black"; 
if (fail[1]!="") 
lblcol[1].style.color="red"; 
else 
lblcol[1].style.color="black"; 
if (fail[2]!="") 
lblcol[2].style.color="red"; 
else 
lblcol[2].style.color="black"; 
if (fail[3]!="") 
lblcol[3].style.color="red"; 
else 
lblcol[3].style.color="black"; 
if (fail[4]!="") 
lblcol[4].style.color="red"; 
else 
lblcol[4].style.color="black"; 

有沒有更快的方法來添加此效果?

回答

0

你可以在一個簡單的循環中做到這一點。循環將遍歷數組中的每個值,然後執行此測試。我還將if-else聲明更改爲ternary聲明。下面是代碼會是什麼樣子:

for (var i=0;i<fail.length;i++) { 
    lblcol[i].style.color = fail[i]!="" ? "red" : "black"; 
} 

什麼這個循環會做的是首先設置變量i0(通過代碼var i=0;),那麼如果i<fail.length測試,這將是真正的第5次迭代,因爲fail.length是5.之後執行forloop的內容,它會增加1(通過代碼i++),並從測試i<fail.length的部分開始。

在循環內,它分配一個顏色索引ilblcol,並且當在索引i陣列fail中的值不等於空字符串分配值"red",否則它將值"black"

+0

謝謝你的解釋。這工作完美。 –

+0

@ItlikeBooom如果這是您要找的答案,請點擊答案內容左側的複選標記,將其標記爲「已接受」。它會清楚地表明這個答案已經得到解答,並且它也會表明這個答案爲你解決了這個問題,以防萬一有人在這個頁面上找到相同的答案。 – Joeytje50