Foros del Web » Programando para Internet » Javascript »

Comprobar campo solo si está activo

Estas en el tema de Comprobar campo solo si está activo en el foro de Javascript en Foros del Web. Hola: Después de mucho rebuscar he logrado que un campo de texto se active según la elección de un select. Ahora viene lo que no ...
  #1 (permalink)  
Antiguo 02/04/2015, 06:34
 
Fecha de Ingreso: septiembre-2007
Mensajes: 23
Antigüedad: 17 años, 1 mes
Puntos: 0
Comprobar campo solo si está activo

Hola:
Después de mucho rebuscar he logrado que un campo de texto se active según la elección de un select. Ahora viene lo que no logro, obligar al usuario a insertar un numero en el campo, pero solo si está activo (es decir, solo cuando selecciona la opcion 1 y se activa el input text).

¿Hay alguna manera de comprobar si está activo, y si es así comprobar que el valor no esté vacío?

Pongo algo de código para haceros una idea:

Código PHP:
Ver original
  1. <select name="curso" size="1" id="curso" onChange="if(this.options[1].selected) document.getElementById('socio').disabled=false; else if(this.options[2].selected) {document.getElementById('socio').disabled=true}">
  2.               <option selected value="" disabled/>Seleccione</option>
  3.                 <option value="SOCIOS">SOCIOS</option>
  4.                 <option value="NO SOCIOS">NO SOCIOS</option>

y más abajo tengo el input para introducir el número de socio en caso de seleccionarse la opción 1 (que a su vez activa el input)

Código PHP:
Ver original
  1. <input name="socio" type="text" id="socio" size="10" disabled/>

Muy agradecido por cualquier aportación

Última edición por Imanol78; 02/04/2015 a las 06:36 Razón: Edito para agradecer cualquier aportación
  #2 (permalink)  
Antiguo 02/04/2015, 07:35
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 11 años, 2 meses
Puntos: 578
Respuesta: Comprobar campo solo si está activo

Puedes añadirle el atributo required. Solamente lo comprueba cuando no está deshabilitado.
  #3 (permalink)  
Antiguo 02/04/2015, 13:21
 
Fecha de Ingreso: septiembre-2007
Mensajes: 23
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Comprobar campo solo si está activo

Parece que no es así. No me funciona...
Código PHP:
Ver original
  1. <input name="socio" type="text" id="socio" size="10" disabled required/>
Gracias de todos modos.
  #4 (permalink)  
Antiguo 02/04/2015, 13:28
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 11 años, 2 meses
Puntos: 145
Respuesta: Comprobar campo solo si está activo

No entiendo exactamente qué quieres.
__________________
¿Te sirvió la respuesta? Deja un +1
  #5 (permalink)  
Antiguo 02/04/2015, 23:48
 
Fecha de Ingreso: septiembre-2007
Mensajes: 23
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Comprobar campo solo si está activo

A ver si me puedo explicar.
Selecciono un tipo de inscripcion a evento, socio o no socio. En el caso de ser socio, se activa el campo "numero socio" y debe ser de obligado cumplimiento. En el caso de no socio, el campo "número socio" se mantiene inactivo.
Tengo hecho con javascript una revisión para los campos que no deben quedar vacíos, pero claro, este "número socio" tan solo ha de rellenarse si selecciono ese tipo de inscripción en el select.

¿Me he explicado ahora?

Gracias por la ayuda prestada
  #6 (permalink)  
Antiguo 03/04/2015, 00:18
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 11 años, 2 meses
Puntos: 145
Respuesta: Comprobar campo solo si está activo

¿Algo como esto?

http://www.forosdelweb.com/f13/ocult...7/#post4694085
__________________
¿Te sirvió la respuesta? Deja un +1
  #7 (permalink)  
Antiguo 03/04/2015, 00:47
 
Fecha de Ingreso: septiembre-2007
Mensajes: 23
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Comprobar campo solo si está activo

Ya lo había revisado pero yo ya tengo el select que me activa o desactiva el campo según la elección. Tan solo quiero que en la opción uno y una vez activado el campo (cosa que ya tengo como muestro más arriba) obligue a introducir datos, o no pase el submit sin haber comprobado que hay datos.

Debo explicarme muy mal...
  #8 (permalink)  
Antiguo 03/04/2015, 02:13
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 11 años, 2 meses
Puntos: 145
Respuesta: Comprobar campo solo si está activo

Cita:
Iniciado por Imanol78 Ver Mensaje
Ya lo había revisado pero yo ya tengo el select que me activa o desactiva el campo según la elección. Tan solo quiero que en la opción uno y una vez activado el campo (cosa que ya tengo como muestro más arriba) obligue a introducir datos, o no pase el submit sin haber comprobado que hay datos.

Debo explicarme muy mal...
Será eso, o que yo estoy sin dormir, o ambas cosas.

¿Ya has probado con el required en el input? Si ese campo no está relleno, por lo general, el navegador no deja avanzar al usuario hasta que lo complete.
__________________
¿Te sirvió la respuesta? Deja un +1
  #9 (permalink)  
Antiguo 03/04/2015, 06:05
 
Fecha de Ingreso: septiembre-2007
Mensajes: 23
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Comprobar campo solo si está activo

Vale, ya comentaba que lo he probado. Por lo visto safari no soporta el atributo required, por lo que tengo que buscarme otra solución.

Gracias por las aportaciones, se admite cualquier solución al problema.
  #10 (permalink)  
Antiguo 03/04/2015, 10:37
Avatar de Dafonz  
Fecha de Ingreso: octubre-2009
Mensajes: 127
Antigüedad: 15 años, 1 mes
Puntos: 36
Respuesta: Comprobar campo solo si está activo

Segun yo Safari si soporta la validacion, pero no impide el submit.
Por lo que podrias hacer un workaround con javascript, algo como:

Código Javascript:
Ver original
  1. // se obtiene el formulario y el campo a validar
  2. var formulario = document.getElementsByTagName('form')[0],
  3.     campo = document.getElementsByTagName('input')[0];
  4.  
  5. // se quita validacion para que se comporte igual en todos los browser
  6. formulario.noValidate = true;
  7.  
  8. // se agrega listener en el submit y se checa por campo valido y campo activo
  9. formulario.addEventListener('submit', function(event) {
  10.         if (!campo.disabled && !event.target.checkValidity()) {
  11.             event.preventDefault();
  12.             alert('No Valido');
  13.         }else{
  14.            alert('formulario enviado');
  15.         }
  16.     }, false);

El required en el campo sigue siendo necesario, ya que es la forma de identificar si es valido con checkValidity.

Te dejo un fiddle como demo
http://jsfiddle.net/srLckfg3/

Puedes agregar el disabled al campo y probar que cuando esta inactivo se manda sin validar.
  #11 (permalink)  
Antiguo 05/04/2015, 05:43
 
Fecha de Ingreso: septiembre-2007
Mensajes: 23
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Comprobar campo solo si está activo

Muchas gracias, lo probaré, aunque tendré que modificar alguna cosilla...
  #12 (permalink)  
Antiguo 05/04/2015, 17:49
 
Fecha de Ingreso: abril-2015
Mensajes: 24
Antigüedad: 9 años, 7 meses
Puntos: 1
Respuesta: Comprobar campo solo si está activo

Cita:
Iniciado por Imanol78 Ver Mensaje
Ya lo había revisado pero yo ya tengo el select que me activa o desactiva el campo según la elección. Tan solo quiero que en la opción uno y una vez activado el campo (cosa que ya tengo como muestro más arriba) obligue a introducir datos, o no pase el submit sin haber comprobado que hay datos.

Debo explicarme muy mal...
Hola Imanol.

Si no lo he entendido mal se trata de evitar que el usuario supere el formulario con algún campo "obligatorio" en blanco.

Si es así, la solución es sencilla. Se me ocurre por ejemplo una rutina que valide el formulario. No es más que una función que se ejecuta de manera previa al envío, para comprobar si todos los campos están completados según nuestras indicaciones

Hay muchos ejemplos a lo largo y ancho de la red, pero aquí te dejo una.

http://librosweb.es/libro/javascript/capitulo_7/validacion.html

Un saludo.
  #13 (permalink)  
Antiguo 05/04/2015, 23:00
 
Fecha de Ingreso: septiembre-2007
Mensajes: 23
Antigüedad: 17 años, 1 mes
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

Etiquetas: activo, campo, input, select, valor
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 15:34.