2011-05-26 13 views
6

Tengo un problema con la función válida de jQuery. Cuando está en IE, no funciona, el válido siempre devuelve verdadero. He utilizado este código: client side validation with dynamically added field¿Cómo hacer que la función válida de jQuery funcione de manera confiable en IE?

Aquí está el gráfico:

    Chrome  IE 

jquery-1.6.1  works  not working 
jquery-1.4.4  works  works 

1,6 no funciona en IE también. Sin embargo, 1.4.4 jQuery válido funciona en IE.

Aquí está la jsFiddle ambiente prueba (prueba de esto como local 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> 

ACTUALIZACIÓN

probé mi código en jsFiddle, tiene efectos secundarios, el jQuery 1.6 es válido está trabajando en IE. No pruebe este código en jsFiddle. Pruebe este código en su html local

+2

¿Qué versión de IE usaste? – reporter

+0

Recientemente he utilizado la función de análisis dinámico que ha encontrado allí y parece que no puedo replicar el problema, parece que todos funcionan en 1.6.1 e IE. Quizás tiene algo que ver con la forma en que agrega una entrada personalizada con validación adjunta. ¿Podrías poner esto en marcha en JSFiddle? – Henry

+2

Eso es mucho código. Algunos ni siquiera HTML/JS. Si minimiza la cantidad de código, es mucho más probable que obtenga una respuesta. –

Respuesta

5

Este problema ha sido resuelto. prueba la versión 1.8.1.

Download jQuery validation plugin

+0

Segunda vez hoy stackoverflow me ha salvado de enloquecer. ¡aclamaciones! – Sniffer

+0

Perfecto. Tuve el mismo problema en que la llamada válida no funcionaba en IE 8, pero funcionaba en Firefox. Descargado el último JQUery Validation 1.8.1 y mis problemas desaparecieron. Gracias Beygi –

1

Hola también consiguió el mismo problema y he actualizado mi archivo de secuencias de comandos a la más reciente y todo está funcionando muy bien en mi lado. Ve a jquery.com y busca el último archivo de código jquery.

Cuestiones relacionadas