Ver Mensaje Individual
  #13 (permalink)  
Antiguo 05/04/2015, 23:00
Imanol78
 
Fecha de Ingreso: septiembre-2007
Mensajes: 23
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Comprobar campo solo si está activo

Hola:
Ya dispongo de una funcion que me valida los campos si están o no rellenos y con diferentes condiciones, pero me los valida todos, estén o no activos.
A ver si me explico mejor:
Usuario rellena formulario con dos opciones iniciales en un select:
a.- SOCIO
- Este activa campo "número socio", de obligado cumplimiento.
b.- NO SOCIO
- Este mantiene desactivado campo número socio, ahora no es de obligado cumplimiento.

Código PHP:
Ver original
  1. <select name="curso" size="1" id="curso" onChange="if(this.options[1].selected) {document.getElementById('numerosocio').disabled=false}
  2. else if(this.options[2].selected) {document.getElementById('socio').disabled=true}">
  3.               <option selected value="" disabled/>Seleccione</option>
  4.                 <option value="SOCIO">SOCIOS</option>
  5.                 <option value="NO SOCIOS">NO SOCIOS</option>                                                
  6.                 </select>
  7. <td class="texto">N&ordm; Socio<br>
  8. <input name="socio" type="text" id="socio" size="10" disabled/></td>

Envía formulario (submit) y una funcion revisa campos:

Código Javascript:
Ver original
  1. function MM_findObj(n, d) { //v4.01
  2.   var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
  3.     d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  4.   if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  5.   for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  6.   if(!x && d.getElementById) x=d.getElementById(n); return x;
  7. }
  8.  
  9. function MM_validateForm() { //v4.0
  10.   var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  11.   for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
  12.     if (val) { nm=val.name; if ((val=val.value)!="") {
  13.       if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
  14.         if (p<1 || p==(val.length-1)) errors+='- '+nm+' contiene una dirección email incorrecta.\n';
  15.       } else if (test!='R') { num = parseFloat(val);
  16.         if (isNaN(val)) errors+='- El campo '+nm+' debe ser numérico.\n';
  17.         if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
  18.           min=test.substring(8,p); max=test.substring(p+1);
  19.           if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
  20.     } } } else if (test.charAt(0) == 'R') errors += '- Debe rellenar obligatoriamente el campo '+nm+'.\n'; }
  21.   }
  22.   if (inscripciones.curso.value == "")
  23.   {
  24.   errors+= '- Debe seleccionar un curso disponible\n';
  25.   }
  26.   if (inscripciones.email.value!=inscripciones.email2 .value)
  27.   {
  28.   errors+= '- Las direcciones e-mail no coinciden\n';
  29.   }
  30.   if (inscripciones.centrotr.value == "")
  31.   {
  32.   errors+= '- Debe rellenar obligatoriamente un centro de trabajo\n';
  33.   }
  34.   if (inscripciones.provincia2.value == "")
  35.   {
  36.   errors+= '- Debe seleccionar una provincia de trabajo\n';
  37.   }
  38.   if (inscripciones.profesion.value == "")
  39.   {
  40.   errors+= '- Debe seleccionar obligatoriamente a profesión\n';
  41.   }
  42.   if (errors) alert('El fomulario contiene los siguientes errores:\n'+errors);
  43.   document.MM_returnValue = (errors == '');
  44. }

Si a est función le incluyo que revise el campo "numero socio" lo hace bien, pero tanto si está activo como si no.

Lo que quiero es que lo revise sólo en el caso de que esté activo