我为主持人创建表单以添加新用户。表单最多可以扩展为六行。我设置了js电子邮件验证,但它只检查第一行,所以我需要添加一个循环来检查另一行'如果主持人添加了多行,则会收到电子邮件字段。
HTML代码是:
<td><input class="eml" name="email"></td>
如果添加了更多行,则字段名称为:
<td><input class="eml" name="email"></td>
<td><input class="eml" name="email2"></td>
<td><input class="eml" name="email3"></td>
<td><input class="eml" name="email4"></td>
<td><input class="eml" name="email5"></td>
我正在使用的js函数是:
function ValidateEmail()
{
var regexEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
var email = document.getElementById("pls").elements.namedItem("email").value;
if (!(regexEmail.test(email))) {
document.pls.email1.focus() ;
//email.focus();
alert("Please enter a valid email address");
return false;
}
else {
return true;
}
}
我知道一种方法可以添加一个循环,但问题是我无法替换电子邮件&#39; elements.namedItem("email")
中带有变量
我的问题是:
var email = document.getElementById("pls").elements.namedItem("email[i]").value;
所以我可以在循环中重复它以获取下一个电子邮件字段。
答案 0 :(得分:2)
出现你也可以使用常规js使用返回NodeList的querySelectorAll对选择器进行属性启动。
在运行代码的示例中,当函数运行时,第三封电子邮件为空,因此将关注并请求有效的电子邮件
function ValidateEmail() {
var regexEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
var emailFields = document.querySelectorAll('input[name^="email"]');
for (var i = 0; i < emailFields.length; i++) {
if (!regexEmail.test(emailFields[i].value)) {
emailFields[i].focus();
alert("Please enter a valid email address");
return false;
}
}
return true;
}
ValidateEmail();
&#13;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
</head>
<body>
<td><input class="eml" name="email" value="validemail@test.com"></td><br>
<td><input class="eml" name="email2" value="validemail@test.com"></td><br>
<td><input class="eml" name="email3"></td><br>
<td><input class="eml" name="email4"></td><br>
<td><input class="eml" name="email5"></td>
</body>
</html>
&#13;
如果您还使用表单,则可以查看&#34;模式&#34;输入标签的属性,您可以将正则表达式直接应用于字段
答案 1 :(得分:1)
在Javascript中,您可以使用+
运算符连接字符串。
因此,要获取字符串'email1'
,您只需执行'email'+1
。
因此,在你的循环中,你可以拥有:
var email = document.getElementById("pls").elements.namedItem("email"+i).value;
如果您坚持第一行的名称为email
(而非email1
),则可以执行以下操作:
var iclean = (i === 1) ? '' : i;
var email = document.getElementById("pls").elements.namedItem("email"+iclean).value;