【问题标题】:JQuery 1.6 $('form').validate() not working in IE7 & IE8JQuery 1.6 $('form').validate() 在 IE7 和 IE8 中不起作用
【发布时间】:2011-08-20 00:53:54
【问题描述】:

更新: 我已经使用 Razor HTML 5 创建了一个新的 MVC 3 项目,然后我在 JQuery 1.6 中使用 NuGet 更新了该项目,并且验证插件不再起作用,它每次都会回发并返回错误消息服务器。我认为 JQuery 1.6

破坏了验证插件

我有一个使用 Jquery UI 对话框(从包含表单的部分视图加载)的 MVC 3 应用程序,以便通过 ajax 向服务器提交信息。我想在执行 ajax 发布之前在客户端触发对表单的验证。在 Firefox 和 IE9 上运行良好,在 IE7 和 IE8 中 form.validate() 总是返回 true。

这是附在我的提交按钮上的 js 代码:

    var wizard = $("#wizard"); //div that holds the modal dialog
    var myform = $("#wizard form");

    var submitFunction = function (e) {
        e.preventDefault(); //no postback
        myform.validate();
        if (myform.valid()) {
            $(this).attr("disabled", "disabled");
            submited = true;
            $.post(
                "SuperAdmin/CreateEditController",
                $(this).serialize(),
                function (data) {
                    if (data.Success) {
                        wizard.dialog('destroy');
                    }
                    else {
                        wizard.html(data.Html);
                    }
                },
                "json"
            ); //end json post
        }
    };
myform.submit(submitFunction);

我正在使用以下包括:

<script src="@Url.Content("~/Scripts/jquery-1.6.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

JQuery Validation 插件在 1.8.0 版本中使用 NuGet 升级,JQuery 库升级到 1.6。

更新: 我已经测试了使用脚手架默认模板生成的代码,它做同样的事情,没有客户端验证。也许 JQuery 1.6 与 Razor 脚手架模板不兼容??

【问题讨论】:

  • 请同时发布您表单中的 HTML 代码。
  • 如果这是验证函数的代码,e 定义在哪里?请发布完整的代码,因为问题预计是一个简单的错字,即不能很好地处理。
  • src="@Url.Content("~/Scripts/jquery-1.6.min.js")" 对我来说似乎很奇怪——是一个新的 mvc3 东西吗?
  • @Hogan JQuery 发布了一个 ew 和改进的版本,看这里stefanprodan.eu/2011/05/updat-mvc-projects-to-jquery-1-6

标签: jquery asp.net-mvc-3 jquery-validate


【解决方案1】:

不要这样做:

if (myform.valid()) 

这样做:

if (myform.validate().form()) 

希望这会有所帮助。干杯

【讨论】:

    【解决方案2】:

    在 IE7,8 中存在一些关于 attr() 的错误,希望在下一个版本中得到修复。

    也许 jQuery 团队在更改 attr() 方面做了正确的事情,但这些更改确实毁了每个人的工作。

    而且它绝对是升级的最佳选择。

    【讨论】:

      【解决方案3】:

      确保您的 jQuery-Validate 插件是最新的。您应该为 jQuery-Validate 使用 1.8.0.1 版本。 NuGet 包名称是 jQuery.Validation。

      【讨论】:

      • 我已经应用了 NuGet 的最新更新,但它们之间的唯一区别是许可证类型,文件内的版本仍然是 1.8.0
      • @Stefan - 你可以尝试删除 jQuery 和 jQuery-Validate,然后确保实际文件已从系统中删除,然后重新安装这两个包吗?
      【解决方案4】:

      Jquery Validate 目前不适用于 IE6、IE7 和 IE8 中的 jQuery 1.6。

      https://github.com/jzaefferer/jquery-validation/issues/105

      【讨论】:

      • 我把头发拉到这个上。获取最新版本的 jquery.validate 解决了这个问题。
      【解决方案5】:

      它也不适用于我的 IE9。回滚到 jQuery-1.5.1 为我解决了这个问题。您可以运行 NuGet "Install-Package jQuery -version 1.5.1" 包管理器命令进行回滚。

      【讨论】:

        【解决方案6】:

        尝试切换到非缩小版:

        jQuery 1.6 的缩小版在 IE7、IE8 兼容模式和 IE9 兼容模式下似乎无法正常工作。切换到非缩小版对我有用。

        http://bugs.jquery.com/ticket/9365

        祝你好运!

        【讨论】:

        • 非缩小版为我解决了开发中的问题。对于生产来说,这不是一个好的解决方案。顺便说一句,我看到了 IE9 的问题
        【解决方案7】:

        我遇到过类似的情况,当我使用 JQuery 1.6.2、Jquery.Validate 1.8 和 Jquery.Validate.Unobtrusive 时,IE8 中的每个验证都是正确的;但它适用于 FireFox

        我目前正在创建一个人们可以从任何页面登录的网站。我的设计是父页面使用 JQuery.Load(url) 将我的子页面(登录)加载到 JQuery 对话框中。我的父页面不包含 JQuery 对话框;子页面(登录)包含对话框。由于子页面是部分页面,因此它不包含所有样板 HTML

        我的子页面中缺少的 html 示例:

        <html>
           <title></title>
           <body>
           </body>
        </html>
        

        我通过独立于父页面测试子页面(登录)来发现,当没有正文元素时,IE 会出现 JQuery Dialog 和 JQuery Validation 问题。

        我创建了一个 jsFiddle 示例(请参阅下面的链接)。如果您在 IE 8 中测试此示例,则验证不起作用,但如果您在 FireFox 中测试它,则验证确实有效。在 jsFiddle 示例中,我包含了 body 元素,但 IE8 仍然存在问题。当我查看 jsFiddler 的源代码时,我找不到任何正文元素,并认为这导致了 jsFiddler 中的问题。如果我在我的电脑上运行代码并且包含 body 元素,那么 IE8 和 Firefox 版本都可以。如果我删除 body 元素,IE8 将无法工作,而 FireFox 可以。

        http://jsfiddle.net/BarDev/aRj64/

        【讨论】:

          【解决方案8】:

          我在使用 1.6 时遇到了同样的问题。

          将 jquery.validate 升级到最新版本,没有任何区别。

          已将 jquery 升级到 1.7 并已修复。

          【讨论】:

            【解决方案9】:

            我在这里尝试了很多答案,但都没有成功。最后,我发现我需要将jquery.validate 库更新到1.9 版。我知道我之前已经搜索过但找不到它,所以我写了这篇关于如何找到最新版本并解决这个问题的小博客文章:

            Jquery validation not wokring in ie7 and ie 8

            【讨论】:

              【解决方案10】:

              我在 IE7/IE8 中遇到了 jquery.validate.js 的问题。调试后,我注意到以下行导致了问题(版本 1.7 中的 ln 436):

              return $([]).add(this.currentForm.elements)
                          .filter(":input")
              

              将这两行替换为:

              return $(':input', this.currentForm)
              

              这对我有用。

              【讨论】:

                【解决方案11】:

                但是,将以下元标记添加到页面的标题部分将有助于禁用兼容模式:

                <meta http-equiv="X-UA-Compatible" content="IE=edge" >
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-02-11
                  相关资源
                  最近更新 更多