Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Ocultar y mostrar campos via select

Estas en el tema de Ocultar y mostrar campos via select en el foro de Javascript en Foros del Web. Hola buenas tardes, necesito de su ayuda tengo este select, lo que necesito es que al momento de elegir "especifico" muestre el formulario específico o ...
  #1 (permalink)  
Antiguo 27/03/2015, 18:19
 
Fecha de Ingreso: febrero-2015
Mensajes: 35
Antigüedad: 9 años, 9 meses
Puntos: 0
Ocultar y mostrar campos via select

Hola buenas tardes, necesito de su ayuda
tengo este select, lo que necesito es que al momento de elegir "especifico" muestre el formulario específico o si se elige comercial aparezca su respectivo formulario

Tipo <select name="elige" id="">
<option value="">Espec&iacute;fico</option>
<option value="">Comercial</option>

</select>

<div id="opc1">
<p>formulario del especifico</p>
</div>
<div id="opc2">
<p>Formulario comercial</p>
</div>

de antemano gracias por su ayuda
  #2 (permalink)  
Antiguo 27/03/2015, 19:25
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: Ocultar y mostrar campos via select

Espero que esto te sirva como ejemplo: http://jsfiddle.net/j0bkvLgv/

Código HTML:
Ver original
  1. <form class="test">
  2.     <select name="selector" id="test">
  3.         <option value="1">Espec&iacute;fico</option>
  4.         <option value="2">Comercial</option>
  5.     </select>
  6. </form>
  7.  
  8. <form class="esp">
  9.     <label>Especifica:</label>
  10.     <input type="text" />
  11. </form>
  12.  
  13. <form class="com">
  14.     <label>Comercial:</label>
  15.     <input type="text" />
  16. </form>

Código CSS:
Ver original
  1. .test {
  2.     background:green;
  3.     padding:15px;
  4.     margin:10px;
  5. }
  6.  
  7. .esp {
  8.     background:blue;
  9.     padding:15px;
  10.     margin:10px;
  11.     display:none;
  12.     color:white;
  13. }
  14.  
  15. .com {
  16.     background:red;
  17.     padding:15px;
  18.     margin:10px;
  19.     display:none;
  20.     color:white;
  21. }

Código Javascript:
Ver original
  1. //Asignamos como valor principal al "select", el valor 1. Es el que se mostrará sin haber seleccionado nada.
  2. if ($('#test').val() == 1)
  3.     {
  4.         $(".esp").css("display","block");
  5.         $(".com").css("display","none");
  6.     };
  7.  
  8. //Detectamos los cambios y mostramos uno u otro form
  9. $('#test').change(function() {
  10.    
  11.     if ($('#test').val() == 1)
  12.     {
  13.         $(".esp").css("display","block");
  14.         $(".com").css("display","none");
  15.     };
  16.    
  17.     if ($('#test').val() == 2)
  18.     {
  19.         $(".esp").css("display","none");
  20.         $(".com").css("display","block");
  21.     };
  22.    
  23. });

Saludos.
__________________
¿Te sirvió la respuesta? Deja un +1
  #3 (permalink)  
Antiguo 27/03/2015, 20:52
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Ocultar y mostrar campos via select

Una manera sencilla de hacer esto es utilizando una clase CSS que haga visible al elemento.

Primero, oculta a ambas divisiones:

Código CSS:
Ver original
  1. div{
  2.     display: none;
  3. }

Luego, crea la clase que hará visible al elemento al que se la apliques:

Código CSS:
Ver original
  1. .visible{
  2.     display: block;
  3. }

La estructura de tu combo debería de ser más o menos así:

Código HTML:
Ver original
  1. <select name="elige" id="elige">
  2.     <option value="">Seleccione una opción</option>
  3.     <option value="opc1">Específico</option>
  4.     <option value="opc2">Comercial</option>

Como verás, asigné los identificadores de las divisiones a los valores de las opciones, esto para que cuando se elija una opción, se tome a la división correspondiente al valor de la opción seleccionada y así podamos mostrarla. También creé una opción que por defecto será la primera y le indicará al usuario lo que debe de hacer.

Ahora, crea una función que se ejecutará cuando se elija una opción del combo:

Código Javascript:
Ver original
  1. document.querySelector("#elige").addEventListener("change", function(){
  2.     if (this.value.length){
  3.         if (document.querySelector(".visible").length){
  4.             document.querySelector(".visible").className = "";
  5.         }
  6.         document.querySelector("#" + this.value).className = "visible";
  7.     }
  8. }, false);

Cuando se elija una opción del combo, primero verificamos que su valor tenga contenido o extensión, que para el caso es lo mismo, luego de esto, verificamos si existen elementos con la clase 'visible' (esta verificación es útil solo la primera vez, para evitar que se generen mensajes de error en la consola, pues al principio, ningún elemento posee esa clase) y de haber, se la quitamos. Finalmente, asignamos dicha clase al elemento cuyo identificador corresponda con la opción seleccionada.

La ventaja de hacerlo así, es que puedes tener N divisiones y el funcionamiento siempre será el mismo.

DEMO

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #4 (permalink)  
Antiguo 30/03/2015, 12:09
 
Fecha de Ingreso: febrero-2015
Mensajes: 35
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Ocultar y mostrar campos via select

sí me sirvió gracias, pero elijo una de las dos y regreso a elegir eleccione me sigue apareciendo el cuadro sea rojo o verde, ahi como le puedo hacer?
  #5 (permalink)  
Antiguo 30/03/2015, 12:14
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Ocultar y mostrar campos via select

Muéstranos el código actualizado y explícanos mejor qué está pasando ahora porque, la verdad, no te entendí ni un poquito.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 30/03/2015, 18:57
 
Fecha de Ingreso: febrero-2015
Mensajes: 35
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Ocultar y mostrar campos via select

mira esto es lo que llevo, me podrías orientar por favor
la parte de java script y css no te entendi muy bien , asi ke podrías ayudarme por favor?


te lo agradecería muchisimo
<form method="POST" action="procesar.php">

<select name="elige" id="elige">
<option value="">seleccione una opcion</option>
<option value="">Espec&iacute;fico</option>
<option value="">Comercial</option>
</select>

<!--PRIMER OPCION-->
<div id = "opc1">
<p>
Nombre: <input type="text" name="nombre">
</p>
Apellidos: <input type="text" name="apellidos">
<p>
Compra (Unidades):<input type="text" name="compra">
</p> <p>
Fecha:<input type="date" name="fecha">
</p>
<p>
Zona:<select name="zona" required pattern="[A-Z ]+">
<option value="">...</option>
<option value="TUXPAN-COAMILES">TUXPAN-COAMILES</option>
<option value="ROSAMORADA-RUIZ">ROSAMORADA-RUIZ</option>
<option value="LAS HACIENDAS">LAS HACIENDAS</option>
</select>
</p>
<p>
D&iacute;a:<select name="dia" required pattern="[A-Z]+">
<option value="">...</option>
<option value="LUNES">LUNES</option>
<option value="MARTES">MARTES</option>
<option value="MIERCOLES">MIERCOLES</option>
<option value="JUEVES">JUEVES</option>
<option value="VIERNES">VIERNES</option>
<option value="SABADO">SABADO</option>
</select>
</p>
<p>
No. Ruta:<select name="numero" required pattern="[1-9]+" title="Sólo números" >
<option value="">....</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</p>
<input type="submit" values="guardar" name="guardar">
</div>

<!--sEGUNDA OPCION-->

<div id="opc2">
<p>
Neogocio/servicio: <input type="text" name="nombre">
</p>
<p>
Compra (Unidades):<input type="text" name="compra">
</p> <p>
Fecha:<input type="date" name="fecha">
</p>
<p>
Zona:<select name="zona" required pattern="[A-Z ]+">
<option value="">...</option>
<option value="TUXPAN-COAMILES">TUXPAN-COAMILES</option>
<option value="ROSAMORADA-RUIZ">ROSAMORADA-RUIZ</option>
<option value="LAS HACIENDAS">LAS HACIENDAS</option>
</select>
</p>
<p>
D&iacute;a:<select name="dia" required pattern="[A-Z]+">
<option value="">...</option>
<option value="LUNES">LUNES</option>
<option value="MARTES">MARTES</option>
<option value="MIERCOLES">MIERCOLES</option>
<option value="JUEVES">JUEVES</option>
<option value="VIERNES">VIERNES</option>
<option value="SABADO">SABADO</option>
</select>
</p>
<p>
No. Ruta:<select name="numero" required pattern="[1-9]+" title="Sólo números" >
<option value="">....</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</p>
<input type="submit" values="guardar" name="guardar">

</div>

<!--TERMINACION-->

</form>
  #7 (permalink)  
Antiguo 30/03/2015, 19:31
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Ocultar y mostrar campos via select

A ver, vamos por partes.

Lo que te decía con respecto a los estilos (CSS), es que desde una hoja de estilos, ocultes a ambos <div> mediante la propiedad display, asignándole el valor none, luego, en la misma hoja de estilos, crea una clase que tendrá como única propiedad a display pero con el valor block, de esta manera, cuando selecciones una opción del <select>, tomas al <div> que corresponda y le aplicas dicha clase, además, buscas al <div> que ya posea dicha clase, es decir, al que haya sido seleccionado previamente.

Como añadido, la primera opción, que es la que no tiene valor, al ser seleccionada, debe de ocultar al <div> que sea visible en ese momento, por lo que el script sería así:

Código Javascript:
Ver original
  1. //La variable en la que guardaré al elemento que posea la clase 'visible'
  2. var visible;
  3.  
  4. //Ejecuto una función cuando elija una opción del <select>
  5. document.querySelector("#elige").addEventListener("change", function(){
  6.    
  7.     //Tomo al <div> que posea la clase 'visible'
  8.     visible = document.querySelector(".visible");
  9.  
  10.     //Si el valor de la opción seleccionada contiene uno o más caracteres
  11.     if (this.value.length){
  12.         //Verifico si hay al menos un <div> con la clase 'visible'
  13.         if (visible.length){
  14.             //De haberlo, le quito dicha clase
  15.             visible.className = "";
  16.         }
  17.         //Luego, tomo al <div> cuyo id corresponda con el de la opción seleccionada y le asigno la clase 'visible'
  18.         document.querySelector("#" + this.value).className = "visible";
  19.     }
  20.  
  21.     //Si el valor de la opción seleccionada no contiene caracteres (está vacía)
  22.     else{
  23.         //Verifico si hay al menos un <div> con la clase 'visible'
  24.         if (visible.length){
  25.             //De haberlo, le quito dicha clase
  26.             visible.className = "";
  27.         }
  28.     }
  29. }, false);

Y, por favor, cuando muestres código, utiliza el highlight que corresponda, así será más fácil leer tu código. Puedes seleccionarlo desde el <select> que aparece justo arriba del área de texto en el que escribes tus respuestas.



No te olvides de asignar los id de los <div> a las dos últimas opciones del <select>, tal y como te lo expliqué en mi respuesta anterior.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 31/03/2015, 13:06
 
Fecha de Ingreso: febrero-2015
Mensajes: 35
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Ocultar y mostrar campos via select

si si entiendo, pero, seguí tus indicaciones y no logro que me aparezca el "div" que selecciono
  #9 (permalink)  
Antiguo 31/03/2015, 13:19
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Ocultar y mostrar campos via select

¿Cómo tienes organizado tu código?

Muéstranos el esquema, porque sospecho que el código JavaScript se encuentra en la cabecera y por ende, el <select> no se ve afectado ya que aún no ha cargado. Si este es el caso, sácalo de ahí y ponlo debajo del último elemento de tu documento y justo antes de la etiqueta </body>.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #10 (permalink)  
Antiguo 31/03/2015, 13:48
 
Fecha de Ingreso: febrero-2015
Mensajes: 35
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Ocultar y mostrar campos via select

mira te lo voy a mostrar todo y me dices que me falta o que puse demás


Código Javascript:
Ver original
  1. <script>
  2.     document.querySelector("#elige").addEventListener("change", function(){
  3.     if (this.value.length){
  4.         if (document.querySelector(".visible").length){
  5.             document.querySelector(".visible").className = "";
  6.         }
  7.         document.querySelector("#" + this.value).className = "visible";
  8.     }
  9. }, false);
  10.     </script>

Código HTML:
Ver original
  1.     <h1>Hielo de Tuxpan</h1>
  2.     <h3>Registro Cliente</h3>
  3.     <br>
  4.     <br>
  5.     <form method="POST" action="procesar.php">
  6.  
  7.          <select name="elige" id="elige">
  8.             <option value="">seleccione una opcion</option>
  9.             <option value="opc1">Espec&iacute;fico</option>
  10.             <option value="opc2">Comercial</option>
  11.         </select>
  12.  
  13. <!--PRIMER OPCION-->
  14.         <div id = "opc1">
  15.             <p>
  16.                 Nombre: <input type="text" name="nombre">
  17.             </p>
  18.             Apellidos: <input type="text" name="apellidos">
  19.             <p>
  20.                 Compra (Unidades):<input type="text" name="compra">
  21.             </p>            <p>
  22.                 Fecha:<input type="date" name="fecha">
  23.             </p>
  24.             <p>
  25.                 Zona:<select name="zona" required pattern="[A-Z ]+">
  26.     <option value="">...</option>
  27.     <option value="TUXPAN-COAMILES">TUXPAN-COAMILES</option>
  28.     <option value="ROSAMORADA-RUIZ">ROSAMORADA-RUIZ</option>
  29.     <option value="LAS HACIENDAS">LAS HACIENDAS</option>
  30.             </p>
  31.             <p>
  32.                D&iacute;a:<select name="dia" required pattern="[A-Z]+">
  33.     <option value="">...</option>
  34.     <option value="LUNES">LUNES</option>
  35.     <option value="MARTES">MARTES</option>
  36.     <option value="MIERCOLES">MIERCOLES</option>
  37.     <option value="JUEVES">JUEVES</option>
  38.     <option value="VIERNES">VIERNES</option>
  39.     <option value="SABADO">SABADO</option>
  40.             </p>
  41.             <p>
  42.                 No. Ruta:<select name="numero" required pattern="[1-9]+" title="Sólo números" >
  43. <option value="">....</option>
  44. <option value="1">1</option>
  45. <option value="2">2</option>
  46. <option value="3">3</option>
  47.             </p>
  48.             <input type="submit" values="guardar" name="guardar">
  49.         </div>
  50.  
  51. <!--sEGUNDA OPCION-->
  52.  
  53.         <div id="opc2">
  54.             <p>
  55.                 Neogocio/servicio: <input type="text" name="nombre">
  56.             </p>
  57.             <p>
  58.                 Compra (Unidades):<input type="text" name="compra">
  59.             </p>            <p>
  60.                 Fecha:<input type="date" name="fecha">
  61.             </p>
  62.             <p>
  63.                 Zona:<select name="zona" required pattern="[A-Z ]+">
  64.     <option value="">...</option>
  65.     <option value="TUXPAN-COAMILES">TUXPAN-COAMILES</option>
  66.     <option value="ROSAMORADA-RUIZ">ROSAMORADA-RUIZ</option>
  67.     <option value="LAS HACIENDAS">LAS HACIENDAS</option>
  68.             </p>
  69.             <p>
  70.                D&iacute;a:<select name="dia" required pattern="[A-Z]+">
  71.     <option value="">...</option>
  72.     <option value="LUNES">LUNES</option>
  73.     <option value="MARTES">MARTES</option>
  74.     <option value="MIERCOLES">MIERCOLES</option>
  75.     <option value="JUEVES">JUEVES</option>
  76.     <option value="VIERNES">VIERNES</option>
  77.     <option value="SABADO">SABADO</option>
  78.             </p>
  79.             <p>
  80.                 No. Ruta:<select name="numero" required pattern="[1-9]+" title="Sólo números" >
  81. <option value="">....</option>
  82. <option value="1">1</option>
  83. <option value="2">2</option>
  84. <option value="3">3</option>
  85.             </p>
  86.             <input type="submit" values="guardar" name="guardar">
  87.        
  88.         </div>
  89.  
  90.         <!--TERMINACION-->
  91.    
  92.     </form>
  93.  
  94.     <a href="index.php">Regresar</a>
  95. </body>

Código CSS:
Ver original
  1. body{
  2.     width: 100%;
  3.     height: 100%;
  4.     background-color: #fe9;
  5. }
  6.  
  7. div{
  8.     display: none;
  9. }
  10.  
  11.  
  12. .visible{
  13.     display: block;
  14. }


amm
  #11 (permalink)  
Antiguo 31/03/2015, 22:47
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Ocultar y mostrar campos via select

Aparentemente, todo está bien, solo que el código JavaScript, es decir, todo lo que está entre las etiquetas <script></script> incluidas ellas, deben de ir luego del último elemento del cuerpo del documento y justo antes de la etiqueta </body>. Esto es porque el código se ejecuta de arriba hacia abajo, entonces, cuando carga el código JavaScript estando en la cabecera, aún no cargan los elementos del documento, por lo tanto, no existe ningún elemento con el id 'elige' al que se pueda afectar.

Cambia la ubicación del código JavaScript y tu problema deberá de haberse solucionado.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #12 (permalink)  
Antiguo 01/04/2015, 12:03
 
Fecha de Ingreso: febrero-2015
Mensajes: 35
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Ocultar y mostrar campos via select

D: no me salio sigo teniendo lo mismo que ante, de todas maneras muchas gracias por tomarse el tiempo de ayudarme
  #13 (permalink)  
Antiguo 01/04/2015, 13:50
 
Fecha de Ingreso: febrero-2015
Mensajes: 35
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Ocultar y mostrar campos via select

ya lo resolví, use un if por cada condición de selección y añadí una libreria .js :D

Etiquetas: campos, formulario, select
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 19:56.