En un proyecto reciente, la validación del formulario requirió juzgar el rango de tiempo de inicio y finalización: la hora de finalización debe ser mayor o igual a la hora de inicio. Es decir: el año de fin debe ser mayor que el año de inicio; si son iguales, comparar el mes de inicio y el mes de fin, si los meses de inicio y fin también son iguales, comparar las fechas; Luego, para cada verificación, puede utilizar la siguiente función para comparar.
función comparar(comienzo,fin,error){
var comenzar = parseInt(comenzar,10);
var fin = parseInt(fin,10);
var diff = final - comienzo;
si(diferencia < 0){
alerta(error);
}demás{
devolver verdadero;
}
}
De esta manera, durante la verificación, siempre que el resultado sea verdadero, significa que se aprobó. como:
var año = comparar(2001,2003,'año');
var mes = comparar(1,2,'mes');
var día = comparar(12,13,'día');
alert(año && mes && día); //El resultado es verdadero------"verdadero"
Modifique los meses de inicio y finalización y las fechas de inicio y finalización anteriores. como:
var año = comparar(2001,2003,'año');
var mes = comparar(3,2,'mes');
var día = comparar(24,13,'día');
alert(año && mes && día /El resultado es falso------"falso");
El resultado de la ejecución muestra "mes", "día" y "falso" en secuencia. De hecho, cuando los meses inicial y final son incorrectos, no necesitamos verificar la fecha, el requisito previo para la verificación del mes es que sea el año; pasa; el requisito previo para la verificación del día Se verifica el mes. Después de un análisis cuidadoso, decidí almacenar los tres parámetros de la función anterior en modo singleton, a saber:
{
comienzo: 2001,
final: 2003,
error: "El año final debe ser mayor que el año inicial"
}
Sin embargo, no quiero definir los parámetros de la función. ¿Puede la función verificar automáticamente en función de los parámetros pasados? La respuesta es sí. Al comienzo de la función, primero determine el número de parámetros. Si es mayor que 1, contiene procesamiento recursivo. ¿Cómo hacer procesamiento recursivo? Hice lo siguiente dentro de la función:
var len = argumentos.longitud;
si(len > 1){
var args = Array.prototype.slice.call(argumentos);
args.shift(); //Elimina el primer parámetro y usa los parámetros restantes para el procesamiento recursivo
}
Para los argumentos, no podemos llamar directamente al método Array.shift(). Aunque los argumentos tienen un atributo de longitud, después de todo no son una matriz, así que use el método Array.slice() para convertirlo en una matriz. En cuanto a los argumentos, puede obtener más información en línea y no entrará en detalles aquí. ¿Por qué sólo se procesa cuando len es mayor que 1? Porque cuando el parámetro es 1, no es necesario realizar el siguiente paso de verificación. ¿Cuándo ocurre el procesamiento recursivo? Si lo piensa detenidamente, solo es necesario cuando el valor inicial y el valor final son iguales. Al comprender esto, podemos construir fácilmente nuestra función de verificación.
var diff = parseInt(argumentos[0].end,10) - parseInt(argumentos[0].begin,10);
si(diferencia <0){
alerta(argumentos[0].error);
devolver falso;
}de lo contrario si(diff == 0){
devolver len > 1? argumentos.callee.apply(this,args): verdadero;
}demás{
devolver verdadero;
}
En el código anterior, arguments.callee es la función en sí. En cuanto al uso de apply, puede encontrar información relevante en la web.
En este punto, la función de verificación se ha completado, pero debe prestar atención a lo siguiente:
Eso es todo por ahora, veamos los ejemplos . A veces, no queremos mostrar información de error en forma de alerta. Podemos personalizar la función de procesamiento y pasarla como último parámetro. Luego, al comienzo de la función, obtenga la función de procesamiento, como por ejemplo:
var func = argumentos[len - 1];
if(tipo de función == 'función'){
func(argumentos[0]);
}
Entonces, la función de procesamiento final es así:
función comparar(){
var len = argumentos.longitud;
var func = argumentos[len - 1];
si(len > 1){
var args = Array.prototype.slice.call(argumentos);
args.shift(); //Elimina el primer parámetro y usa los parámetros restantes para el procesamiento recursivo
}
var diff = parseInt(argumentos[0].end,10) - parseInt(argumentos[0].begin,10);
si(diferencia <0){
(tipo de función == 'función') ? func(argumentos[0].error): alerta(argumentos[0].error);
devolver falso;
}de lo contrario si(diff == 0){
devolver len > 1? argumentos.callee.apply(this,args): verdadero;
}demás{
devolver verdadero;
}
}
función comparar(){
var len = argumentos.longitud;
si(len > 1){
var args = Array.prototype.slice.call(argumentos);
args.shift(); //Elimina el primer parámetro y usa los parámetros restantes para el procesamiento recursivo
}
var diff = parseInt(argumentos[0].end,10) - parseInt(argumentos[0].begin,10);
si(diferencia <0){
alerta(argumentos[0].error);
devolver falso;
}de lo contrario si(diff == 0){
devolver len > 1? argumentos.callee.apply(this,args): verdadero;
}demás{
devolver verdadero;
}
}