Javascript 如何使jQuery有效函数在IE上可靠地工作?

Javascript 如何使jQuery有效函数在IE上可靠地工作?,javascript,jquery,internet-explorer,validation,Javascript,Jquery,Internet Explorer,Validation,我对jQuery有效函数有一个问题。当启用IE时,它不起作用,有效值总是返回true。我使用了以下代码: 以下是图表: Chrome IE jquery-1.6.1 works not working jquery-1.4.4 works works 1.6在IE上也不起作用。但是,1.4.4 jQuery在IE上有效 下面是JSFIDLE友好测试(将其作为本地html进行测试): //来

我对jQuery有效函数有一个问题。当启用IE时,它不起作用,有效值总是返回true。我使用了以下代码:

以下是图表:

                    Chrome      IE

jquery-1.6.1        works       not working
jquery-1.4.4        works       works
1.6在IE上也不起作用。但是,1.4.4 jQuery在IE上有效

下面是JSFIDLE友好测试(将其作为本地html进行测试):


//来源于https://stackoverflow.com/questions/5965470/client-side-validation-with-dynamically-added-field
//我认为这没有问题
(函数($){
$.validator.unobtrusive.parseDynamicContent=函数(选择器){
//使用普通的unobstructive.parse方法
$.validator.unobtrusive.parse(选择器);
//获取相关表格
var form=$(选择器).first()最近('form');
//获取非结构化验证器和jquery验证器的集合
//并将两者进行比较
var unobtrusiveValidation=form.data(“unobtrusiveValidation”);
var validator=form.validate();
$.each(unobtrusiveValidation.options.rules,函数(elname,elrules){
if(validator.settings.rules[elname]==未定义){
var args={};
$.extend(args、elrules);
args.messages=unobtrusiveValidation.options.messages[elname];
$('[name='+elname+']')。规则(“添加”,args);
}否则{
$.each(规则、函数(规则名称、数据){
if(validator.settings.rules[elname][rulename]==未定义){
var args={};
args[rulename]=数据;
args.messages=unobtrusiveValidation.options.messages[elname][rulename];
$('[name='+elname+']')。规则(“添加”,args);
}
});
}
});
}
})($);
//…来源于他人
//我的代码从这里开始。。。
$(函数(){
var html=“”;
$(“表格”)。附加(html);
变量范围=$(“#XXX”);
$.validator.unobtrusive.parseDynamicContent(范围);
$(“#保存”)。单击(函数(e){
e、 预防默认值();
警报(scope.valid());
});
});
//…我的代码到此结束
更新


我在JSFIDLE上尝试了我的代码,它有副作用,jQuery 1.6的valid正在IE上运行。不要在JSFIDLE上测试此代码。在本地html上测试此代码

此问题已解决。试试1.8.1版


嗨,我也遇到了同样的问题,我已将两个脚本文件更新为最新版本,我这边的一切都很好。请访问jquery.com,查看最新的jquery代码文件。

您使用了什么版本的IE?我最近使用了您在那里找到的动态解析函数,我似乎无法复制该问题,似乎所有这些都在1.6.1和IE上工作。也许这与添加带有验证的自定义输入的方式有关。你能在JSFIDLE上安装并运行它吗?这需要很多代码。有些甚至不是HTML/JS。如果你尽量减少代码量,你就更有可能得到答案。好的,今天stackoverflow第二次让我免于发疯,我将删除ASP.NET MVC代码!干杯完美的我也有同样的问题,在IE 8中调用valid不起作用,但在FireFox中却起作用。下载了最新的JQUery验证1.8.1,我的问题就消失了。谢谢你,贝吉
<!--
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> -->

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script>

<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.8/jquery.validate.min.js" type="text/javascript"></script>

<script src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>



<form id="XXX">
    <input type="submit" id="Save" value="Save">

</form>


<script type="text/javascript">

    // sourced from https://stackoverflow.com/questions/5965470/client-side-validation-with-dynamically-added-field
    // which I do think don't have a bug
    (function ($) {


        $.validator.unobtrusive.parseDynamicContent = function (selector) {
            //use the normal unobstrusive.parse method
            $.validator.unobtrusive.parse(selector);

            //get the relevant form
            var form = $(selector).first().closest('form');

            //get the collections of unobstrusive validators, and jquery validators
            //and compare the two
            var unobtrusiveValidation = form.data('unobtrusiveValidation');
            var validator = form.validate();

            $.each(unobtrusiveValidation.options.rules, function (elname, elrules) {
                if (validator.settings.rules[elname] == undefined) {
                    var args = {};
                    $.extend(args, elrules);
                    args.messages = unobtrusiveValidation.options.messages[elname];
                    $('[name=' + elname + ']').rules("add", args);
                } else {
                    $.each(elrules, function (rulename, data) {
                        if (validator.settings.rules[elname][rulename] == undefined) {
                            var args = {};
                            args[rulename] = data;
                            args.messages = unobtrusiveValidation.options.messages[elname][rulename];
                            $('[name=' + elname + ']').rules("add", args);
                        }
                    });
                }
            });
        }
    })($);
    // ...sourced from others


    // my code starts here...
    $(function () {

        var html = "<input data-val='true' " +
           "data-val-required='This field is required' " + "name='inputFieldName' id='inputFieldId' type='text'/>";
        $("form").append(html);

        var scope = $('#XXX');

        $.validator.unobtrusive.parseDynamicContent(scope);




        $('#Save').click(function (e) {
            e.preventDefault();
            alert(scope.valid());
        });

    });
    // ...my code ends here

</script>