表单验证未在提交时运行

Posted

技术标签:

【中文标题】表单验证未在提交时运行【英文标题】:Form validation not running onsubmit 【发布时间】:2012-11-20 05:39:05 【问题描述】:

我正在尝试对 html 表单进行表单验证,以确保此人已填写了这两个字段。我在这里整理了一个 JSFiddle:

http://jsfiddle.net/yCqqj/

它以前对我有用,但我不知道现在发生了什么。我制作了一个 JSFiddle 以将其从我的网站中拉出,以确保没有其他内容与它发生冲突,但我现在意识到它在代码中。这两个字段分别是名称“电子邮件地址”和“名称”,看起来我正在正确检查它们的值。基本上,如果他们将任一字段留空,我正在寻找警报(而不是表单的提交)。感谢您帮助我找出问题所在。我很感激。

function ValidateForm()
    var emailID=document.MailingList.emailaddress
    var nameID=document.MailingList.Name

        if ((nameID.value==null)||(nameID.value==""))
        alert("Please Enter your Name");
        nameID.focus();
        return false;
    

    if ((emailID.value==null)||(emailID.value==""))
        alert("Please Enter your Email ID");
        emailID.focus();
        return false;
    
 

​ 即使没有返回true,表单仍然提交。

【问题讨论】:

【参考方案1】:

问题是您没有在Head 部分定义ValidateForm。 我已经编辑了 jsfiddle.check demo。

【讨论】:

你是说它应该在页面上的<head>标签内吗?我已经在页面本身上尝试过,但由于某种原因它仍然无法正常工作?我对你的理解正确吗? 嗯,确实有效:jsfiddle.net/yCqqj/2。我可能需要检查页面上的冲突吗? 我在开发者工具中看到因为找不到 ValidateForm 而发生了错误。我只是将它移到了 head 标签并解决了。 是的开发者工具/firebug对于调试非常有用,下面来自chrome:“Uncaught ReferenceError: ValidateForm is not defined” 我想知道它是否与页面上的其他内容冲突。您是使用 Firefox 还是 Chrome 来检查 javascript【参考方案2】:

我可以看到两个问题:

首先,什么是echeck?如果我拿走该代码,它将起作用。 其次,您不应该在控制 nameID.value 后返回。如果您这样做,您对 emailID.value 的控制将无法完成。

【讨论】:

即使是假的我不退货也不提交表格吗? 如果您返回 false,则不会提交表单。一旦你返回 true,它就会被提交。 正确,所以它会首先检查名称。如果名称在那里,那么它将检查电子邮件。如果电子邮件在那里,那么它将返回 true,对吗?还是我错了? 如果认为你的脚本应该是这样的: function ValidateForm() var emailID=document.MailingList.emailaddress var nameID=document.MailingList.Name if ((nameID.value==null)| |(nameID.value=="")) alert("请输入您的姓名") nameID.focus() return false if ((emailID.value==null)||(emailID.value=="") ) alert("请输入您的电子邮件 ID") emailID.focus() return false return true 看起来不太好...您应该只在代码的最后一行返回 true。【参考方案3】:

要搭载 Behnam 的答案,这是因为 ValidateForm 没有像他所说的那样在头部定义。但这里是如何解决它:

在 jsfiddle 中,在 Frameworks & Extensions 的左上方区域,将其设置为 no-wrap 。然后更新并设置为基础以保存您的更改。

【讨论】:

以上是关于表单验证未在提交时运行的主要内容,如果未能解决你的问题,请参考以下文章

html/javascript onsubmit 事件未在表单提交上调用以验证表单

MS Access 验证规则未在子表单中触发

即使在表单活动验证状态下,如何仅在提交时验证角度表单

Angular 2 提交时触发表单验证

在提交第二个表单时,正在验证第一个表单 - jquery validate

当 jquery.validate 验证表单时启用提交按钮