2011-05-26 53 views
6

我对jQuery有效函数有问题。在IE上时,它不起作用,有效始终返回true。我用这个代码:client side validation with dynamically added field如何使jQuery有效函数在IE上可靠地工作?

以下是图表:

    Chrome  IE 

jquery-1.6.1  works  not working 
jquery-1.4.4  works  works 

1.6无法在IE工作了。不过,1.4.4 jQuery对IE有效。

这里的 的jsfiddle友好 测试(测试这个本地HTML):

<!-- 
<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> 

UPDATE

我想我上的jsfiddle代码,它有副作用,jQuery的1.6有效的是在IE上工作。不要在jsFiddle上测试这段代码。在您的本地html上测试此代码

+2

您使用的是什么版本的IE? – reporter 2011-05-26 07:31:23

+0

我最近使用了你在那里找到的动态解析函数,我似乎无法复制这个问题,似乎所有的工作都在1.6.1和IE上。也许这与你添加一个带有验证的自定义输入的方式有关。你可以在JSFiddle上运行起来吗? – Henry 2011-05-26 08:51:33

+2

这是很多代码。有些甚至不包括HTML/JS。如果您最小化代码量,您更有可能获得答案。 – 2011-05-26 11:28:18

回答

5

此问题已解决。尝试版本1.8.1。

Download jQuery validation plugin

+0

第二次今天stackoverflow已经救了我从疯了!干杯! – Sniffer 2011-07-27 14:43:18

+0

完美。我遇到了同样的问题,即在IE 8中无效的调用方式,但在FireFox中工作。下载了最新的JQUery Validation 1.8.1,我的问题消失了。谢谢Beygi – 2011-08-09 02:30:06

1

您好我也得到了同样的问题,我已经更新了我的两个脚本文件到最新版本,并一切工作很细就在我身边。转到jquery.com并检查最新的jquery代码文件。