2014-01-27 27 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