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

HTML和JavaScript。onSubmit从不阻止表单的发布,javascript,html,forms,validation,onsubmit,Javascript,Html,Forms,Validation,Onsubmit,我正在建立一个网页,我有人注册帐户。作为网页的一项要求,我需要使用JavaScript验证他们的帐户信息用户名和密码必须与特定密码匹配。如果注册通过测试,我将它们重定向到一个php页面,该页面将存储它们的信息。如果注册没有通过JavaScript测试,我希望用户保持在同一页面上 我已经摆弄我的代码好几个小时了,我不明白为什么它不起作用。我删除了代码中所有不必要的内容,直到我能够在JavaScript返回值false时建模表单是否被发布。我搜索了类似的问题,发现问题往往是人们忘记把onsubmit

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

我已经摆弄我的代码好几个小时了,我不明白为什么它不起作用。我删除了代码中所有不必要的内容,直到我能够在JavaScript返回值false时建模表单是否被发布。我搜索了类似的问题,发现问题往往是人们忘记把onsubmit=返回函数;以他们的形式。另一个常见的提示是使用event.preventDefault;我所做的功能。这显然不是这里的问题

功能注册检查{ ifevent.preventDefault{ 违约事件; } 否则{ event.returnValue=false; } 返回false; } 用户名:
不要将onsubmit内联放在表单标记中

开始时通过JS绑定它

如果您正在使用jquery:

$('#registration').submit(function() { registrationCheck(); });
然后去掉所有事件内容并返回false。您当前将永远不会到达返回错误行,因为您试图访问未在函数声明中明确声明的事件对象,如:

function registrationCheck(event) { }

如果您不需要event对象来处理当前正在使用它的其他任何事情,那么只需去掉这些东西,因为如果您使用jquery,您不需要为事件设置默认值或返回值。

如果您在控制台中查看,您可能会看到未定义“event”的错误。原因是IE和Edge使用属性window.event时,Chrome和大多数其他浏览器将事件作为参数传递给事件处理程序

那么这条线呢

function registrationCheck(){
应替换为以下两行:

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

这将声明一个名为“event”的新局部变量,该变量获取事件参数的值,或者如果它为空,则获取窗口对象的event属性

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

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

不肯定。可能是他们写的是onSubmit而不是onSubmit,可能是他们没有在函数声明中显式地传递事件,我所知道的是,通过js绑定将使您的生活更加轻松如果您不确定,那你为什么要发布答案呢?如果你只是像我展示的那样绑定函数,去掉所有事件内容,然后简单地返回false,那么它将绝对阻止表单提交。由于访问未声明的事件变量阻止它到达返回错误行,JS中有更多错误。如果您通过jquery绑定,则不需要event.preventdefault,因此除非您有其他原因访问该事件,否则您应该剪切这些行。您可以创建一个吗?如果您有堆栈片段,谁需要plunker!我测试了这个解决方案,它可以在Chrome上运行,但不能在Firefox上运行。知道为什么吗?我不知道。也许它不喜欢“事件”。您可以尝试为参数和局部变量使用不同的名称。确保在函数的其余部分也对其进行更改。我的笔记本电脑上没有FF,现在无法测试。我让它工作。其思想是,仅将这两行添加到JavaScript并不能解决问题,除非在调用函数时还将事件作为参数传递。应该很明显,但我忽略了这一点。谢谢你的帮助!