Foros del Web » Programando para Internet » Javascript »

Dudas de Return entre funciones

Estas en el tema de Dudas de Return entre funciones en el foro de Javascript en Foros del Web. Buenas a todos Conseguí por internet un par de funciones que trabajan unidas para validar si en un campo ha sido escrito correctamente un CIF ...
  #1 (permalink)  
Antiguo 28/04/2009, 09:43
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 17 años, 2 meses
Puntos: 1
Pregunta Dudas de Return entre funciones

Buenas a todos

Conseguí por internet un par de funciones que trabajan unidas para validar si en un campo ha sido escrito correctamente un CIF o un NIF.

Código:
function valcif(cif){
	par = 0;
	non = 0;
	letras="ABCDEFGHKLMNPQS";
	let=cif.charAt(0);

	if (!isNaN(let)){
		nif=cif;
		valnif(nif);
		return false;
	}
	if (letras.indexOf(let.toUpperCase())==-1){
		alert("El comienzo del Cif no es válido");
		return false;
	}

	for (zz=2;zz<8;zz+=2)
		par = par+parseInt(cif.charAt(zz));

	for (zz=1;zz<9;zz+=2){
		nn = 2*parseInt(cif.charAt(zz));
		if (nn > 9)
			nn = 1+(nn-10);
		non = non+nn;
	}

	parcial = par + non;
	control = (10 - ( parcial % 10));

	if (control==10)
		control=0;

	if (control!=cif.charAt(8)){
		alert("El Cif no es válido");
		return false;
	}
}

function valnif(nif){
	dni=nif.substring(0,nif.length-1);
	let=nif.charAt(nif.length-1);
	
	if (!isNaN(let)){
		alert('Falta la letra del Nif');
		return false;
	}
	else{
		cadena = "TRWAGMYFPDXBNJZSQVHLCKET";
		posicion = dni % 23;
		letra = cadena.substring(posicion,posicion+1);
		if (letra!=let.toUpperCase()){
			alert("Nif no válido");
			return false;
		}
	}
}
En un formulario dispongo de un botón que me llama a una función principal que hace más comprobaciones con otros campos.

Desde esa función llamo a estas dos validadoras cif/nif de la siguiente manera:

if (!valcif(f.nif.value))
return false;

Pensaba que me si las que validan lo hacían todo devolverían "true" y podría seguir con el resto de las operaciones, pero siempre devuelven "false" aunque no se quejen con ningun alert y en el cuadro haya escrito un valor correcto.

Además siempre se queda parado el conjunto porque no se como continuarla..

Gracias de antemano por la ayuda.

Un saludo.
  #2 (permalink)  
Antiguo 28/04/2009, 09:56
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Dudas de Return entre funciones

El problema es que en ningún sitio estás devolviendo true si todo va bien. Quiero decir, tus funciones lo que hacen es:

- Si está mal, devuelve false
- Cuando llega al final de la función sin que nada haya ido mal, no devuelve nada, sólo termina

En lugar de eso, cuando terminen las funciones sin error, deberías devolver true. Si no lo haces, ocurre lo que te ocurre, que haces !undefined y eso sale true igual que si hicieras !false
  #3 (permalink)  
Antiguo 28/04/2009, 10:01
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Dudas de Return entre funciones

Gracias ante todo por tu interés.

Bien es cierto que he puesto al final de ambas funciones validadoras de CIF y NIF un "return true;" pero como el que oye llover...

Un saludo
  #4 (permalink)  
Antiguo 28/04/2009, 10:12
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Dudas de Return entre funciones

Con el return true al final acabo de probar valnif y funciona correctamente. Cuando es válido devuelve true y en el resto de casos sale el alert y luego devuelve false.

Puedes poner antes del if(!valnif(...) un alert(valnif(...)) y verlo.
  #5 (permalink)  
Antiguo 29/04/2009, 02:07
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Dudas de Return entre funciones

Buenas

Gracias, tenías razón. Ahora si me funciona.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:58.