【问题标题】:form.valid() not working in IE with jquery validation plugin 1.11form.valid() 在带有 jquery 验证插件 1.11 的 IE 中不起作用
【发布时间】:2013-08-01 16:50:33
【问题描述】:

无论是我还是 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 安全有关。就我的两分钱!!!

【问题讨论】:

  • 我不确定你想用上面的代码做什么,但如果你想在提交表单时做一些事情,你可以使用submitHandler钩子。
  • 感谢您的回复!如果表单有效,我正在尝试禁用提交按钮。该代码适用于除 IE 之外的几乎所有浏览器。如果您看到上面的示例代码,则不会触发任何警报....

标签: jquery internet-explorer jquery-validate


【解决方案1】:

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

$('form').validate({
    submitHandler: function(form) {
        // disable submit button here
    }
});

【讨论】:

  • 我会试试这个,但如果我理解的话。验证表单不是已经连接到提交按钮了吗?我不想显式调用 validate 方法,我只想检查表单是否有效...
  • 是的,当您在表单上调用.validate() 时,它会挂接到提交事件。如果你想在表单有效时做除了提交之外的任何事情,你可以在submitHandler进行。
【解决方案2】:

您的代码无法可靠运行,因为您的自定义 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,正如您在演示中看到的那样。

【讨论】:

  • 您的演示工作正常,但它仍然没有帮助我,或者可能是我缺乏知识。我正在使用 MVC,并且在整个项目中,我使用客户端验证和 unobtru ....jquery 进行验证。我没有明确地说.validate()。这已经连接提交。我想要的是在验证被触发后,我想检查它是否有效,然后处理我的其他任务。问题只出在 IE 上……如果我的表单无效,它会显示消息,但如果它有效,则按钮不会被禁用。长话短说 IE .valid() 条件代码永远不会执行。谢谢解释
  • 查看我的问题中的编辑部分
  • @Mr.Imish,如果您使用 MS 的 unobtrusive validation,您不认为这将是您的 OP 中包含的重要信息吗?除此之外...... .validate() 仍然被称为......在代码中的某处。由于使用unobtrusive,您不能将您的选项放在.validate() 中,MVC 文档对此有何评论?那么你在哪里指定你的 jQuery 验证选项和回调函数呢?
【解决方案3】:

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

不起作用

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

两个版本都有效

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

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

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 2013-01-27
    • 2014-01-12
    • 2013-06-05
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多