Java脚本字段验证循环

时间:2016-06-04 09:46:51

标签: javascript loops email-validation

我为主持人创建表单以添加新用户。表单最多可以扩展为六行。我设置了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")中带有变量

的名称

我的问题是:

  1. 我怎么能有这样的东西:
  2. var email = document.getElementById("pls").elements.namedItem("email[i]").value;

    所以我可以在循环中重复它以获取下一个电子邮件字段。

    1. 如果您有其他方法,我们将不胜感激:)

2 个答案:

答案 0 :(得分:2)

出现你也可以使用常规js使用返回NodeList的querySelectorAll对选择器进行属性启动。

在运行代码的示例中,当函数运行时,第三封电子邮件为空,因此将关注并请求有效的电子邮件

&#13;
&#13;
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;
&#13;
&#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;