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

Suv*_*jit 3 javascript jquery jquery-validate

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

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

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

});
Run Code Online (Sandbox Code Playgroud)

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

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

问候, 苏沃吉特

Spa*_*rky 6

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

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


我认为您可能误解了基本用法......

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

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

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

而是放入 DOM 就绪事件处理程序内部...

$(document).ready(function() {

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

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

});
Run Code Online (Sandbox Code Playgroud)

工作演示: 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
     });

});
Run Code Online (Sandbox Code Playgroud)

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


编辑

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

在此示例中,当submitHandler“表单 A”触发时,它会在允许提交之前检查“表单 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
             }
         }
     });

});
Run Code Online (Sandbox Code Playgroud)

  • @Suvojit,它与 `.valid()` 方法无关。**默认情况下**,jQuery Validate 插件将**忽略**所有隐藏的表单元素,因此如果整个表单被隐藏,则 `.valid()` 将始终为 `true`。如果您想忽略任何内容并验证所有隐藏元素,则需要将“ignore”选项设置为“[]”。 (3认同)