-1

要么是我,要么是 IE,但事实是 form.valid() 在 IE 中对我不起作用(在 Chrome/Firefox 中起作用)。我正在使用以下版本:

  • jQuery 1.8.3
  • 验证插件 1.11.1

我有一个包含一个字段的简单表单,当我点击提交按钮时,验证会触发,它会提示用户输入值,并且此代码会触发“alert($(this).valid());”。用户输入值并单击提交按钮后,我运行了以下 jquery 代码:

$(function () {
   $('form').submit(function () {
        alert($(this).valid());
        if ($(this).valid()) {
           alert('Hello');
        }
    });
});

问题是没有任何警报被触发。我在这里做错了什么?我检查了验证插件文档,它说它确实支持我使用的 jquery 版本http://jqueryvalidation.org/

jQuery,用 1.6.4、1.7.2、1.8.3、1.9.0 测试

在开发人员工具中,我没有看到任何错误

*编辑***

此表单具有文件类型的输入(用于文件上传)。如果我评论/不显示它有效。所以我想如果你有文件输入你不能禁用提交按钮左右,则与 IE 安全有关。只有我的两分钱!!!

4

3 回答 3

0

您的代码无法可靠运行,因为您的自定义submit处理程序干扰了submitHandler已内置到插件中的处理程序。

http://jqueryvalidation.org/validate/

submitHandler (默认:原生表单提交)
类型:Function()
表单有效时处理实际提交的回调。获取表单作为唯一参数。替换默认提交。验证后通过 Ajax 提交表单的正确位置。

submit使用此插件时,您永远不需要编写自己的处理程序。为了可靠性,只需使用插件的submitHandler回调函数。

$(document).ready(function() {

    $('#myform').validate({  // initialize the plugin on your form
        // rules and/or options,
        submitHandler: function(form) {
            // this callback function will only fire on a valid form
            // disable submit button
            // etc.        
        }
    });

});

演示:http: //jsfiddle.net/zArRK/

请记住,.validate()是插件的初始化方法,必须在 DOM 就绪时调用一次。这不是您为“测试”表单而调用的方法。每当触发某些内置事件时,插件都会自动完成对表单的测试。您可以调用.valid()以编程方式测试表单,但.valid在这种情况下不需要,正如您在演示中看到的那样。

于 2013-08-01T19:08:37.203 回答
0

试试这个代码,它可能对 IE 更友好:

$('form').validate({
    submitHandler: function(form) {
        // disable submit button here
    }
});
于 2013-08-01T18:30:36.480 回答
0

当我们公司最终从 IE8 升级到 IE10 时,验证功能停止工作。原来我必须用表格来调用它,而不仅仅是像我一样的 ID 名称。

不工作

$("#tcForm").validate({...

两个版本都有效

$("form").validate({...

$("form#tcForm").validate({...

于 2014-12-23T18:52:31.670 回答