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
¿Qué versión de IE usaste? – reporter
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
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. –