【问题标题】:Javascript - Executing all the validation functions on form submitJavascript - 在表单提交上执行所有验证功能
【发布时间】:2014-04-08 07:53:44
【问题描述】:

我目前正在处理一个电子邮件表单,对 javascript 几乎没有经验,但我已经接近完成我需要的工作,但有一段时间很挣扎,花了几个小时尝试我能找到的所有搜索,并认为这里有人可能会立即得到我的答案.

我目前有 3 个功能检查一个框是否已填写、电子邮件格式是否正确以及密码是否匹配。 如果我将每个函数设置为在单击提交时自行运行,它们可以完美地达到自己的预期目的,但是我无法弄清楚如何制作它以便在点击提交时运行所有 3 个函数。我最后一次似乎最接近的尝试是在我的脚本底部添加 validateForm 函数来运行所有脚本,但这似乎不起作用。希望我忽略了一些小事,感谢任何帮助。

HTML:

<form name="registerkeys" form action="form.php" method="post" onsubmit="return validateForm();">
First Name:  <input type="text" name="first_name"><br>
Last Name:  <input type="text" name="last_name"><br>
Email:  <input type="text" name="email"><br>
Phone Number:  <input type="text" name="phonenumber"><br>
Information on Key:  <input type="text" name="keyinfo"><br>
Password:  <input type="password" name="password" id="password"></label><br>
Verify Password:  <input type="password" name="passwordverify" id="passwordverify"><br>
Password Hint:  <input type="text" name="passwordhint"><br>
<textarea rows="5" name="message" cols="30" placeholder="Comments:"></textarea><br>
<input type="submit" name="submit" value="Submit">
</form>

Javascript:

function validateFill(){
    var x=document.forms["registerkeys"]["first_name"].value;
    if (x==null || x=="") {
        alert("First name must be filled out");
        return false;
  }

    var x=document.forms["registerkeys"]["last_name"].value;
    if (x==null || x=="") {
        alert("Last name must be filled out");
        return false;
  }

    var x=document.forms["registerkeys"]["phonenumber"].value;
    if (x==null || x=="") {
        alert("Phone number must be filled out");
        return false;
  }

    var x=document.forms["registerkeys"]["keyinfo"].value;
    if (x==null || x=="") {
        alert("Key info must be filled out");
        return false;
  }

    var x=document.forms["registerkeys"]["pass1"].value;
    if (x==null || x=="") {
        alert("Password must be filled out");
        return false;
  }

    var x=document.forms["registerkeys"]["passwordhint"].value;
    if (x==null || x=="") {
        alert("Password hint must be filled out");
        return false;
  }

} 


function validateEmail()
{
var x=document.forms["registerkeys"]["email"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
  {
  alert("Not a valid e-mail address");
  return false;
  }
}


function validatePassword(){
    var password = document.getElementById("password").value;
    var passwordverify = document.getElementById("passwordverify").value;
    var ok = true;
    if (password != passwordverify) {
        alert("Passwords Do not match");
        document.getElementById("password").style.borderColor = "#E34234";
        document.getElementById("passwordverify").style.borderColor = "#E34234";
        ok = false;
    }
    else {
        alert("Passwords Match!!!");
    }
    return ok;
}


function validateForm(){
    var a = validateFill();
    var b = validateEmail();
    var c = validatePassword();
    return a && b && c;
}

【问题讨论】:

    标签: javascript forms function return


    【解决方案1】:

    您的 validateFill()validateEmail() 函数应在最后返回 true

    validateFill() 仅在验证未通过时返回 false,但从不返回 true。您应该在函数末尾添加return true,在条件之外。

    validateEmail() 如果电子邮件无效,则返回 false,但如果电子邮件有效,则您缺少 return true

    另外,为防止重复弹出窗口,我建议您将 validateForm() 更改为以下内容:

    function validateForm() {
     var a = validateFill();
    
     if (a) var b = validateEmail();
     else var b = false;
    
     if (a&&b) var c = validatePassword();
     else var c = false;
    
     return a && b && c;
    }
    

    所以它只检查一个函数直到它通过,然后检查下一个。

    【讨论】:

    • 谢谢,我添加了 return true;到花括号之前的每个函数的末尾,这并没有解决问题。我是否错误地添加了这个。提前道歉我缺乏javascript知识,你在这里看到的是从网上收集的sn-ps。这是我出于测试目的而上传的地方,您可以看到该功能都不起作用。 cjeffryes.comoj.com
    • 究竟是什么不起作用?它似乎对我有用,尽管有多个消息,但它似乎有效?
    • 哦,我明白了,它在某种程度上确实有效,但我发现如果我用一个字母填写每个框,并添加与表单不匹配的密码仍然提交。但是,如果我将一个字段留空,我会收到错误,包括密码不匹配。猜测我的函数本身需要一些注意,因为它们都在运行。
    • 现在似乎可以工作了,我添加了需要填写密码字段和电子邮件的功能,它似乎可以工作。我明白您对多条消息的意思,我将对此进行调查并删除密码匹配消息。非常感谢@D.Kasipovic 的帮助,非常感谢。编辑:作为对您的编辑的回应,我会尝试一下,再次感谢:)
    • 为什么不直接调用函数:function validateForm() { return validateFill() &amp;&amp; validateEmail() &amp;&amp; validatePassword(); }?如果validateFill() return false 则其他函数不会被单元格等等。
    【解决方案2】:

    validateFill()validateEmail() 最后应该是 return true (现在如果验证通过,它们不会返回任何内容。

    validatePassword() 应该返回 true 而不是 ok

    【讨论】:

    • ok 是一个设置为 true 或 false 的变量。阅读示例。
    • 他使用两种不同的方法:在validatePassword() 中标记并在其他函数中返回错误。一种方法认为所有代码都会更安全,我认为在 JS 中第二种更标准
    • 我个人认为直接返回false 更好,因为它会在第一个错误发生时停止函数执行。但是,它可能会产生后果,因为函数永远不会结束,并且可以与您的逻辑进行游戏。
    • 是的,完全同意你的看法。编辑后的评论要清楚
    猜你喜欢
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2015-03-15
    • 2015-07-26
    • 1970-01-01
    相关资源
    最近更新 更多