HTML 和 JavaScript。 onSubmit 从不阻止表单被发布

HTML and JavaScript. onSubmit never blocks the form from being posted

我正在建立一个网页,让人们注册一个帐户。作为网页的要求,我需要使用 JavaScript 来验证他们的帐户信息(用户名和密码必须与特定密码匹配)。如果注册通过测试,我会将他们重定向到一个 php 页面,该页面将存储他们的信息。如果注册没有通过 JavaScript 测试,我希望用户留在同一页面上。

我已经修改我的代码几个小时了,我不明白为什么它不起作用。我删除了代码中所有非必要的内容,直到我可以模拟当 JavaScript returns 值为 false 时是否发布表单。我搜索了类似的问题,发现问题往往是人们忘记在他们的表格中输入 onsubmit="return function();" 。给出的另一个常见提示是使用我所做的 event.preventDefault(); 函数。这显然不是这里的问题。

<!Doctype html>
<html>
<head>
<script> 

function registrationCheck(){
    if(event.preventDefault){
        event.preventDefault();      
 }
    else{
        event.returnValue = false;
    }
    return false;
}

</script>
</head>
<body>

<form action="test1.html" onSubmit="return registrationCheck();" method="post" id="registration">
    Username: 
    <input type="text" name="username"> <br />
    <br />
    <input type="submit" value="Submit"> 
</form>

</body>
</html>

这段代码在我使用 Edge 进行测试时工作正常,但在 chrome 49.0.2623.110 m 和 firefox 45.0.1

下却惨遭失败

我做错了什么?

不要将 onsubmit 内嵌在表单标签中。

启动时通过JS绑定

如果您正在使用 jquery:

$('#registration').submit(function() { registrationCheck(); });

然后摆脱所有事件的东西,只是 return false。您目前永远不会到达 return 错误行,因为您正在尝试访问您未在函数声明中明确声明的事件对象,例如:

function registrationCheck(event) { }

如果你不需要事件对象来做你当前正在使用的其他任何事情,那么就去掉那些东西,因为你不需要防止默认或设置 return 值如果您使用的是 jquery.

如果您查看控制台,您可能会看到一些关于 'event' 未定义的错误。原因是虽然 IE(和 Edge)使用 属性 window.event、Chrome 而大多数其他浏览器将 event 作为参数传递给事件处理程序。

所以行

function registrationCheck(){

应该换成这两行:

function registrationCheck(event){
  var event = event || window.event;

这将声明一个名为 'event' 的新局部变量,它获取事件参数或(如果为空)window 对象的事件 属性 的值.

尝试将事件传递给您的 registrationCheck() 函数:

function registrationCheck(event){
    if(event.preventDefault){
        event.preventDefault();      
    }
    else{
        event.returnValue = false;
    }
    return false;
}