JavaScript - ¿Que hay mal en esta comprobación?

   
Vista:

¿Que hay mal en esta comprobación?

Publicado por Javier Pardo (5 intervenciones) el 14/06/2011 10:52:54
Hola a todos. La verdad es que ya estoy un poco desesperado con este problema al cual no encuentro solucion por mucho que leo en foros y páginas de internet.

Espero podais echarme una mano, os lo ruego...

Tengo un formulario el cual ademas de otros elementos tiene 2 radio buttons con los valores de Si y No respectivamente.

Se trata de que si el usuario elige el radio button con valor SI, debe necesariamente rellenar otro campo llamado en este caso codigochip para que le permita enviar el formulario. Y si el usuario elige NO en el radiobutto el campo codigochip deja de ser necesario.


Este es el codigo que tengo ahora mismo en mi formulario:

//Como aclaracion decir que el formulario se llama registro y que los radiobutton se llaman chip


//Esta es la funcion de validacion de formulario que comprueba si todos los campos obligatorios estan cumplimentados (es una funcion que hace Dreamweaver automaticamente la cual intento modificar para que me compruebe que radio button esta seleccionado y si ha cumplimentado el campo de codigochip


function MM_validateForm() {

for(i=0;i<document.registro.chip.length;i++)
if(document.registro.chip[i].checked) return document.registro.chip[i].value;

if(document.registro.chip.value="SI")
{
if(document.registro.codigochip.value==""){
alert("Debe introducir el codigo de su chip")
document.registro.codigochip.focus()
return 0;
}
}
else{

var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='- '+nm+' debe ser una dirección de email VALIDA.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='- '+nm+' debe ser solo números.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' está vacio.\n'; }
} if (errors) alert('Atención, hay campos del formulario OBLIGATORIOS sin rellenar o su formato es incorrecto:\n'+errors);
document.MM_returnValue = (errors == '');
}
}
}



//Por otro lado el botón de enviar tiene el siguiente código implementado

<input name="enviar" type="submit" id="enviar" onclick="MM_validateForm('precioinscripcion','','R','dni','','RisNum','fecha','','R','nombre','','R','apellidos','','R','direccion','','R','codigopostal','','RisNum','localidad','','R','provincia','','R','telefono','','NisNum','movil','','RisNum','email','','RisEmail');return document.MM_returnValue"/>




Con este codigo como esta ahora, se salta la comprobacion de si el radiobutton SI esta seleccionado y pasa directamente a la comprobacion del resto de campos....

Es como si no entendiera la funcion:

if(document.registro.chip.value="SI")
{
if(document.registro.codigochip.value==""){
alert("Debe introducir el codigo de su chip")
document.registro.codigochip.focus()
return 0;
}



Por favor, necesito algo de orientacion para resolver el problema.

Muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

¿Que hay mal en esta comprobación?

Publicado por xve (1595 intervenciones) el 14/06/2011 11:45:06
Hola Javier me cuesta un poco seguir tu código, pero no entiendo muy bien... utilizas el evento onclick del buton llamando a la función MM_validateForm pasándole un lista de parámetros..
1
onclick="MM_validateForm('precioinscripcion','','R','dni','','RisNum','fecha','','R','nombre','','R','apellidos','','R','direccion','','R','codigopostal','','RisNum','localidad','','R','provincia','','R','telefono','','NisNum','movil','','RisNum','email','','RisEmail');return document.MM_returnValue"

Pero la funcion javascript (MM_validateForm) que tienes definida, no espera ningun parametro.

Has probado a utilizar el plugin "firebug" en Firefox haber si te da algun error?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Que hay mal en esta comprobación?

Publicado por Martin D Cernadas (1 intervención) el 14/06/2011 11:47:13
Estimado ,
Para poder ver que contiene una variable al momento de una comprobacion como esta, ( if(document.registro.chip.value="SI") , y como uso y costumbre general de debug en programacion, cuando no se cuenta con un debugger porque es codigo script o PHP, es IDEAL MOSTRAR EN UN POP-UP EL MENSAJE CON EL CONTENIDO DE LA VARIABLE...... o usar un Web Browser con capacidad de mostrar el contenido de las variables . Yo le recomiendo eso. Use el Google CHROME o el FireFox con los plugs-in para debug, o mas directo, tire un pop-up mostrando la variable.
Asumir que la variable tiene el valor "SI" es un error porque ud. no sabe a priori que valor puede tener, incluso puede estar en NULL. No asuma! Junte evidencias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Que hay mal en esta comprobación?

Publicado por Javier Pardo (5 intervenciones) el 14/06/2011 13:37:12
Gracias por las respuestas.

Voy a plantear el problema de otra forma a ver si podeis ayudarme.

Tengo el formulario que realiza la siguiente comprobacion para validar:

function MM_validateForm() {

var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='- '+nm+' debe ser una dirección de email VALIDA.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='- '+nm+' debe ser solo números.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' está vacio.\n'; }
} if (errors) alert('Atención, hay campos del formulario OBLIGATORIOS sin rellenar o su formato es incorrecto:\n'+errors);
document.MM_returnValue = (errors == '');
}


Esta funcion comprueba que los campos que estan marcados como obligatorios esten completos y con el tipo de datos requerido.


Ahora lo que necesito es, ademas de que haga esta comprobacion, que realice otra comprobacion "dinamica" es decir, que si un radio button esta marcado con la opcion de SI que compruebe si un textbox esta cumplimentado, y si el mismo radio button esta marcado en NO que no compruebe si el textbox esta cumplimentado (ya que no es necesario)


Mis preguntas son:

1 - ¿Como compruebo en el lado del cliente que opcion ha elegido en el radio button?

2 - Una vez sepa que ha elegido ¿como le digo que si la opcion es SI el campo textbox sea obligatorio y si la opcion es NO que no sea obligatorio?


Esa es mi gran duda.


Gracias de antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar