Javascript 单击';后不会出现警报窗口;确认';

Javascript 单击';后不会出现警报窗口;确认';,javascript,html,Javascript,Html,这是我的家庭作业,也是我第一次做表单验证 HTML代码: <html> <head> <script src="validate_form.js" type="text/javascript"></script> </head> <body> <table> <form name="register" method="post" action="">

这是我的家庭作业,也是我第一次做表单验证

HTML代码:

<html>

<head>
    <script src="validate_form.js" type="text/javascript"></script>
</head>

<body>
    <table>
        <form name="register" method="post" action="">
            <tr><td>First Name:</td><td><input type="text" id="firstname"/></td></tr>
            <tr><td>Surname:</td><td><input type="text" id="surname"/></td></tr>
            <tr><td>Gender:</td><td><input type="text" id="gender"/></td></tr>
            <tr><td>Birthday - Day:</td><td><input type="text" id="dob"/></td></tr>
            <tr><td>Month:</td><td><input type="text" id="month"/></td></tr>
            <tr><td>Year:</td><td><input type="text" id="year"/></td></tr>
            <tr><td>Yahoo ID:</td><td><input type="text" id="yahoo_id"/></td></tr>
            <tr><td>Password:</td><td><input type="text" id="password"/></td></tr>
            <tr><td>Retype password:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
            <td><input type="text" id="retype"/></td></tr>
            <tr><td>Question 1:</td><td><input type="text" id="q1"/></td></tr>
            <tr><td>Answer 1:</td><td><input type="text" id="a1"/></td></tr>
            <tr><td>Question 2:</td><td><input type="text" id="q2"/></td></tr>
            <tr><td>Answer 2:</td><td><input type="text" id="a2"/></td></tr>
            <tr><td><input type="submit" value="Confirm" onclick="validate_form ()"/></td><td></td></tr>
        </form>
    </table>
</body>



</html>

因此,现在的问题是,在警报窗口未出现之前,代码有什么问题?希望可以彻底指出错误,因为我还是JavaScript新手。

当您将变量
error
中的消息串联在一起时,您必须将最后一个
否则if
作为独立的
if

...
else if (ques1 == null || ans1 == null || ques2 == null || ans2 == null)
{
  error += "Invalid Question 1 and/or Answer 1 and/or Question 2 and/or Answer 2.\n";
}

if (error == "") /*If no error, display the following message*/ 
{
  alert("Thank you for your registration.");
}
else /*If there are errors, display all the error messages*/
{
  alert(error);
}
注意:我还注意到检查密码重复的if中有一个错误,您更改了它的名称(您将它命名为
password
,而不是
ps

我在JSFIDLE中上传了两个示例:

此选项只有
if
而不是
else if

在Javascript中,有些值被认为是错误的:

  • 假,
  • 未定义
  • ''
  • 0,
你必须考虑到你的价值也可能是“未定义的”,所以,如果我是你,我会这样做:

if (!first || !surname || !val_name.test(first)  || !val_name.test(sur) )                   
{
    error += "Invalid firstname and/or surname.\n";
}

并将脚本放在body标记的末尾。

alert{error}应为
警报(错误)。刚刚找到并更正。但警报窗口仍然没有出现。您是否尝试过使用chrome调试器、firebug或IE的开发工具调试您?我只是使用Google chrome进行测试。在键入所有要测试的值之后,没有什么事情发生。我把所有的“else if”都改成了“if”,效果很好。但我想知道为什么我不能用“else if”来代替“if”?因为在出现错误的第一个迹象时,你永远不会像else if那样,每次都不会收到一条以上的信息。尝试将所有其他if更改为单个if。
if (!first || !surname || !val_name.test(first)  || !val_name.test(sur) )                   
{
    error += "Invalid firstname and/or surname.\n";
}