errorelement - jQuery Validate(Rango de fechas)
validate submit jquery (5)
Estoy usando el complemento de validación jQuery y me preguntaba si había una forma de validar si la fecha ingresada en un campo era una fecha como aaaa-mm-dd Y la fecha cae entre el 29 de noviembre de 2010 y el 15 de diciembre de 2010
Soy bastante nuevo en jQuery, así que si hay una respuesta, por favor, enmudece la respuesta tanto como sea posible para que pueda superarla. Muchas gracias por cualquier sugerencia
Nunca utilicé el complemento de validación, pero una mirada a través de la API sugiere que algo así podría funcionar:
$.validator.addMethod(''daterange'', function(value, element) {
if (this.optional(element)) {
return true;
}
var startDate = Date.parse(''2010-11-29''),
endDate = Date.parse(''2010-12-15''),
enteredDate = Date.parse(value);
if (isNan(enteredDate)) {
return false;
}
return ((startDate <= enteredDate) && (enteredDate <= endDate));
});
Entonces, creo, necesitaría agregar la clase daterange
como el elemento apropiado.
Si desea una función reutilizable, puede extender las respuestas de Emily y lonesomeday para permitir que se proporcione un argumento:
$.validator.addMethod(''daterange'', function(value, element, arg) {
// Same as above
var startDate = Date.parse(arg[0]),
endDate = Date.parse(arg[1]),
enteredDate = Date.parse(value);
// Same as below
}, $.validator.format("Please specify a date between {0} and {1}."))
Consulte el origen del método de rango de validación de jQuery para ver un ejemplo.
La respuesta de lonesomeday es bastante cercana, con algunos ajustes. Terminaría el código de la siguiente manera:
if(isNaN(enteredDate)) return false;
return ((startDate <= enteredDate) && (enteredDate <= endDate));
}, "Please specify a date between 2010-11-29 and 2010-12-15");
Esto corrige la función isNaN y también proporciona un mensaje de error a los usuarios para que sepan lo que estás buscando.
Hizo un par de pequeñas correcciones en el código de Connor.
El código de trabajo resultante es:
$.validator.addMethod(''daterange'', function(value, element, arg) {
if (this.optional(element) && !value) {
return true;
}
var startDate = Date.parse(arg[0]),
endDate = Date.parse(arg[1]),
enteredDate = Date.parse(value);
if (isNaN(enteredDate)) {
return false;
}
return ( (isNaN(startDate) || (startDate <= enteredDate)) &&
(isNaN(endDate) || (enteredDate <= endDate)));
}, $.validator.format("Please specify a date between {0} and {1}."));
La usa así:
$("#some_date_input").rules("add",{daterange:[''01/31/2001'',''01/31/2020'']});
Mantenga sus caballos, muchachos! :)
No olvide que Date.parse no puede funcionar correctamente con diferentes configuraciones regionales, solo analiza correctamente el formato de fecha específico.
Si usa varios formatos de fecha (específicos de la cultura), es mejor seguir con el manejo de la fecha del jquery datepicker.
Por lo tanto, supongamos que ha cargado el objeto jquery datepicker específico de la cultura correcto (por ejemplo, jquery.ui.datepicker-nb-NO.js, donde el formato de fecha es DD.MM.aaaa y no es analizado por Date.parse) y se inicializó es, el enfoque adecuado es:
$.validator.addMethod(''dateRange'', function (value, element, parameterValue) {
if (this.optional(element) && !value) {
return true;
}
var dateFormat = $(element).datepicker(''option'', ''dateFormat'');
try {
var startDate = $.datepicker.parseDate(dateFormat, parameterValue[0]).getTime();
var endDate = $.datepicker.parseDate(dateFormat, parameterValue[1]).getTime();
var enteredDate = $.datepicker.parseDate(dateFormat, value).getTime();
return (startDate <= enteredDate) && (enteredDate <= endDate);
} catch (error) {
return true;
}
});
He puesto parseDate cosas dentro de try block, porque no hay forma normal de averiguar si la fecha ha sido analizada correctamente.