无法让javascript运行onsubmit

时间:2013-08-14 02:29:56

标签: javascript html validation event-handling

尝试以电子邮件重置页面的形式练习一些表单验证。

这是我的代码:

<!DOCTYPE html>
<html>
<head>
    <title>
        form validation
    </title>
    <script>
        function validateForm()
            {
                var email=document.forms["email_reset"]["user_email"].value;
                var atpos=email.indexOf("@");
                var dotpos=email.indexOf(".");
                var pass1=document.getElementByID("new_pwd");
                var pass2=document.getElementByID("confirm_pwd");
                if(atpos<1 || dotpos<atpos+2 || dotpos+2>=email.length) {
                    alert("Your email address is invalid!");
                    return false;
                }
                if(pass1 != pass2) {
                    alert("Your passwords do not match!");
                    return false;
                }
                else {
                    alert("Your password has been succesfully reset!");
                }
            }
    </script>
</head>
<body>
    <form name="email_reset" onsubmit="validateForm()">
        <br />
        <font id="title" face="arial" color="white" size="2">[ Enter your email and new password below ]</font><br /><br />
        <label id="email_lab" color="white">Email Address:</label>
        <input type="text" class="input" name="user_email" id="user_email" maxlength="100" align="right"  /><br />
        <label id="newpass_lab" color="white">New Password:</label>
        <input type="password" class="input" name="new_pwd" id="new_pwd" maxlength="64" align="right"  /><br />
        <label id="confirmpass_lab" color="white">Confirm Password:</label>
        <input type="password" class="input" name="confirm_pwd" id="confirm_pwd" maxlength="64" align="right"  /><br />
        <input style="width: 25%; margin-bottom: 10px;" type="submit" class="input" id="sub_button" value="Submit" /><br />
    </form>
</body>
</html>

如果电子邮件输入与电子邮件格式不匹配,并且密码输入不相同,我希望有一个警告弹出窗口。但是当我点击提交时,我什么都没得到。

我使用this教程作为指南。我想不知怎的,我仍然缺少一些东西。

3 个答案:

答案 0 :(得分:1)

错误:

  

时间戳:2013年8月14日上午11:19:50错误:TypeError:   document.getElementByID不是函数源文件:   文件:/// C:?/Users/developer/Desktop/tes.html USER_EMAIL = ASD%40yahoo.com&安培; new_pwd = ASD&安培; confirm_pwd = ASD   行:13

您的问题是功能名称。

document.getElementById不是document.getElementByID

你应该得到HTML元素的价值。

var pass1=document.getElementById("new_pwd").value;
var pass2=document.getElementById("confirm_pwd").value;

答案 1 :(得分:0)

将事件添加到validateForm(), 然后添加一个preventDefault

function validateForm(e) {
     e.preventDefault();
....

您的表单在您进行验证之前正在提交

------ -------或者

将提交按钮更改为常规按钮。

而不是在您的表单上有一个onsubmit有validateForm onClick

成功提交表格

答案 2 :(得分:0)

正如评论中所建议的那样,您需要从侦听器返回false以防止提交。

此外,您要比较两个元素(new_pwdconfirm_pwd)而不是它们的值。 DOM元素是对象,两个对象永远不会相等。

> var pass1=document.getElementByID("new_pwd");
> var pass2=document.getElementByID("confirm_pwd");
> ...
> if(pass1 != pass2) {

您可能会发现使用控件名称而不是ID来引用表单中的控件更容易(您可以从表单控件中删除ID)。此外,最好在侦听器中传递对表单的引用,例如

<form onsubmit="return validateForm(this)">

现在功能可以是:

function validateForm(form) {
    var email = form.user_email.value;
    var atpos = email.indexOf("@");
    var dotpos = email.indexOf(".");
    var pass1 = form.new_pwd.value;
    var pass2 = form.confirm_pwd.value;
    ...
}

成功警报应该来自表单导航的任何位置,并且应该从服务器传递。客户端的成功与服务器的成功非常不同。