【问题标题】:Jquery Validator valid() function not working on submitJquery Validator valid() 函数在提交时不起作用
【发布时间】:2015-06-16 00:48:23
【问题描述】:

我们在单个页面应用程序中有多个表单。各个表单都有各自的保存按钮,在该按钮上验证各个表单,如果有效(使用 jquery 验证器 .valid() 方法),则记录保存在工作正常的数据库中。

我们在这里面临的问题是,当在最后提交的最后一个表单中,当我们尝试使用 .valid() 方法验证所有其他表单以进行验证时,无论验证是否错误,它总是返回 true。

$("#submitForm").submit(function(event) {
     $("#educationForm").validate();
     console.log($("#educationForm").valid());

});

即使教育表格无效,这里控制台也给出 true

请帮助我们解决这个问题。

问候, 苏沃吉特

【问题讨论】:

  • 您应该使用event.preventDefault() 来阻止表单提交
  • 多数民众赞成在我的代码中......这与提交表单无关,但即使教育表单未经过验证,我也能做到这一点。
  • 好吧,您不能在表单中包含表单,因此不确定该代码应该如何工作...也许是一个基本示例来说明它是如何使用的。
  • 不,我们有多个没有嵌套的表单......
  • 您在 .submit() 处理程序中错误地调用了 .validate().validate() 只是您初始化插件的方式。

标签: javascript jquery jquery-validate


【解决方案1】:

valid() 函数在提交时不起作用

.valid() 方法旨在以编程方式触发验证测试。当您单击“提交”时,插件会自动进行验证测试,因此在“提交”事件上也调用.valid() 是没有意义的。


我想你可能误会the basic usage...

$("#submitForm").submit(function(event) {
     $("#educationForm").validate();            // <- INITIALIZES PLUGIN
     console.log($("#educationForm").valid());  // <- TEST VALIDATION
});
  • 您将永远不会.validate() 放在除 DOM 就绪处理程序之外的事件处理程序中。 .validate() 方法是插件的初始化方式

  • 正确初始化后,插件自动捕获提交按钮的点击事件。

通过将其放在 .submit() 处理程序中,您正在干扰插件,该插件已经在尝试捕获完全相同的事件。

改为放在 DOM 就绪事件处理程序中...

$(document).ready(function() {

     $("#educationForm").validate();            // <- INITIALIZES PLUGIN

     console.log($("#educationForm").valid());  // <- TEST VALIDATION

});

工作演示:http://jsfiddle.net/2vugwyfe/

或:http://jsfiddle.net/2vugwyfe/1/


验证测试由任何type="submit" 元素自动触发。

如果您需要通过单击另一种类型的元素来触发验证测试,则使用自定义 .click() 处理程序...

$(document).ready(function() {

     $("#educationForm").validate();            // <- INITIALIZES PLUGIN

     $("#button").on('click', function() {
         $("#educationForm").valid();  // <- TEST VALIDATION
     });

});

演示 2:http://jsfiddle.net/pdhvtpdq/


编辑

要检查其他表单是否有效,请使用 submitHandler 选项内的 .valid() 方法。

在此示例中,当“Form A”的submitHandler 触发时,它会在允许提交之前检查“Form B”是否有效。

$(document).ready(function() {

     $("#form_A").validate({              // initialize plugin on Form A
         submitHandler: function(form) {  // fires when Form A is valid
             if($("#form_B").valid()) {   // tests if Form B is valid
                 $(form).submit();        // submit Form A
             }
         }
     });

});

【讨论】:

  • 嘿 Sparky,我已经为 DOM 就绪元素中的所有表单初始化了 .validate(),但单击最终提交按钮时其他表单的 .valid() 仍然返回 true
  • @Suvojit,如果您已经在 DOM 就绪处理程序中调用了 .validate(),那么您为什么还要将它放在 submit() 处理程序中?请再次仔细阅读我的答案并检查 jsFiddle 演示。 您不应该在提交处理程序中使用.valid() 其中任何部分都不应需要.submit() 处理程序。只有在没有type="submit" 按钮的情况下,才需要click 处理程序。
  • 实际上我想在实际提交完整的申请数据之前检查所有其他表格是否有效......如果不是 .valid() 检查我可以在提交表格之前检查一下吗? ?
  • @Suvojit,是的,您可以将.valid() 附加到任何形式,但您会将其放在插件的submitHandler 选项中,而不是放在您自己的.submit() 处理程序中。请参阅我编辑的答案。
  • @Suvojit,它与.valid() 方法无关。 默认情况下,jQuery Validate 插件将忽略所有隐藏的表单元素,因此如果整个表单都被隐藏,那么.valid() 将始终为true。如果您不想忽略任何内容并验证所有隐藏元素,则需要将ignore 选项设置为[]
猜你喜欢
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多