JQuery 1.6 $('form')。validate()在IE7& IE8

时间:2011-05-06 09:15:30

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

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

打破

我有一个MVC 3应用程序,它使用Jquery UI对话框(从包含表单的部分视图加载),以便通过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脚手架模板不兼容??

11 个答案:

答案 0 :(得分:19)

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

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

答案 1 :(得分:5)

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

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

用以下内容替换这两行:

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

这对我有用。

答案 2 :(得分:3)

尝试切换到非缩小版本:

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

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

祝你好运!

答案 3 :(得分:1)

而不是这样做:

if (myform.valid()) 

这样做:

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

希望这会有所帮助。干杯

答案 4 :(得分:1)

IE7,8中的attr()存在一些漏洞,希望在下一版本中得到修复。

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

它绝对是升级的显示器。

答案 5 :(得分:1)

它对我来说也不适用于IE9。回滚到jQuery-1.5.1为我解决了这个问题。您可以运行NuGet“Install-Package jQuery -version 1.5.1”程序包管理器命令来回滚。

答案 6 :(得分:1)

我有类似的情况,当我使用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>

我通过从父页面独立测试子页面(登录)来发现,当没有body元素时,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/

答案 7 :(得分:1)

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

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

将jquery升级到1.7并修复它。

答案 10 :(得分:0)

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

Jquery validation not wokring in ie7 and ie 8