Foros del Web » Programando para Internet » Javascript »

mostrar input segun select multiple

Estas en el tema de mostrar input segun select multiple en el foro de Javascript en Foros del Web. Hola foro, el problema que tengo es el siguiente, resulta que tengo un select multiple de paises ya que requiero que puedan seleccionar varios paises, ...
  #1 (permalink)  
Antiguo 25/02/2014, 11:24
 
Fecha de Ingreso: febrero-2011
Mensajes: 195
Antigüedad: 13 años, 2 meses
Puntos: 1
mostrar input segun select multiple

Hola foro, el problema que tengo es el siguiente, resulta que tengo un select multiple de paises ya que requiero que puedan seleccionar varios paises, pero necesito tener un select de estados(solo de mexico) el cual se encontrara oculto y aparecera hasta cuando seleccione la opcion de mexico en el select multiple y si quito la opcion de mexico vuelva a desaparecer el select de estados el codigo que tengo es este

formulario.php
Código PHP:
<select multiple="multiple" name="paises[]">
<
option class="clasestado" value="AF">Afganistan</option>
<
option class="clasestado" value="AL">Albania</option>
<
option class="clasestado" value="DE">Alemania</option>
<
option class="clasestado" value="AD">Andorra</option>
<
option class="clasestado" value="AO">Angola</option>
<
option class="clasestado" value="MX">Mexico</option>
</
select>

<
select class="ocultoestado" id="selectestado" name="estados">
<
option value="Aguascalientes">Aguascalientes</option>
<
option value="Baja California">Baja California</option>
<
option value="Baja California Sur">Baja California Sur</option>
<
option value="Campeche">Campeche</option>
</
select
y el codigo para ocultar el select de estado es este
Código PHP:
/*Estado*/

    
if ($('input[name=paises]:selected').val() == "MX" ){

    } else {
        $(
".ocultoestado").css("display","none");
    }

    $(
".clasestado").click(function(){
        if ($(
'input[name=paises]:selected').val() == "MX" ) {
            $(
".ocultoestado").slideDown("fast"); //Slide Down Effect
        
} else {
            $(
".ocultoestado").slideUp("fast");  //Slide Up Effect
        
}
    }); 
pero no me funciona, al inicio si oculta el estado, pero cuando selecciono mexico no lo muestra, alguien me puede ayudar con este codigo??
  #2 (permalink)  
Antiguo 25/02/2014, 11:36
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: mostrar input segun select multiple

Esto es más sencillo de lo que crees (y sin usar jQuery).

Código Javascript:
Ver original
  1. var opciones = document.getElementsByName("paises[]")[0],
  2.     mexico = document.getElementById("selectestado");
  3.  
  4. opciones.addEventListener("click", function(){
  5.     mexico.style.display = this.value == "MX" ? "block" : "none";
  6. }, false);

Como no asignas un Id al combo de los países, lo tomo por su nombre, mientras que al de los Estados de México lo tomo por su Id. Cuando seleccione una de las opciones del combo de países con un clic, se verificará el valor que se ha tomado, si es igual a "MX", se muestra el combo de los Estados de México, caso contrario, se lo oculta.

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
  #3 (permalink)  
Antiguo 25/02/2014, 11:52
 
Fecha de Ingreso: febrero-2011
Mensajes: 195
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: mostrar input segun select multiple

Muchas gracias Alexis88, ahora otro problema, si elijo mexico y otro pais me oculta el select de estado, habra alguna forma de que si selecciono mas de 1 pais (obvio que alguno sea mexico) me siga mostrando el select de estado??
  #4 (permalink)  
Antiguo 25/02/2014, 12:34
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: mostrar input segun select multiple

Es que eso no tiene sentido, se supone que eliges un país de la lista para seleccionar uno de sus Estados, a menos que pretendas hacer algo que no has explicado. Por favor, te insto a que nos brindes la información completa acerca de lo que quieres hacer para así poder ayudarte.

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
  #5 (permalink)  
Antiguo 25/02/2014, 12:58
 
Fecha de Ingreso: febrero-2011
Mensajes: 195
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: mostrar input segun select multiple

Lo que requiero es que el campo de estado aparesca cuando hayas seleccionado la opcion de mexico, aun cuando hayas seleccionado otros paises, por eso es que pongo un select multiple, si selecciono solo paises extranjeros no aparecera el select de estado
  #6 (permalink)  
Antiguo 25/02/2014, 15:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: mostrar input segun select multiple

En ese caso, tendrías que hacerlo así:

Código Javascript:
Ver original
  1. var opciones = document.getElementsByName("paises[]")[0],
  2.     mexico = document.getElementById("selectestado");
  3.  
  4. opciones.addEventListener("click", function(){
  5.     if (this.value == "MX")
  6.         mexico.style.display = "block";
  7. }, false);

DEMO

Cuando selecciones la opción MX, se muestra la lista de Estados de México y si seleccionas otra opción, simplemente sigue todo igual.

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
  #7 (permalink)  
Antiguo 25/02/2014, 15:28
 
Fecha de Ingreso: febrero-2011
Mensajes: 195
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: mostrar input segun select multiple

A ver va de nuevo el problema:

Tengo una lista con diferentes paises, y otra lista con estados solamente de mexico, en la lista de paises puedo seleccionar varias opciones, por default una lista de estados de mexico estara oculta, esta se mostrara cuando seleccione la opcion de mexico (MX) y se debera de ocultar si quito la opcion de mexico (MX).

Estaba pensando algo como a la opcion de mexico ejecutar una funcion y la funcion que detecte si esta haciendo selected o esta deseleccionando y en base a eso le aplique un style block o estyle none al select de estados

Código PHP:
<select multiple="multiple" name="paises[]">
<
option class="clasestado" value="AF">Afganistan</option>
<
option class="clasestado" value="AL">Albania</option>
<
option class="clasestado" value="DE">Alemania</option>
<
option class="clasestado" value="AD">Andorra</option>
<
option class="clasestado" value="AO">Angola</option>
<
option class="clasestado" value="MX" onclick="ejecutar_funcion()">Mexico</option>
</
select>

<
select class="ocultoestado" id="selectestado" name="estados">
<
option value="Aguascalientes">Aguascalientes</option>
<
option value="Baja California">Baja California</option>
<
option value="Baja California Sur">Baja California Sur</option>
<
option value="Campeche">Campeche</option>
</
select
  #8 (permalink)  
Antiguo 25/02/2014, 17:18
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: mostrar input segun select multiple

Debiste explicarlo así desde un inicio. Para ese caso, puedes utilizar un array en el cual irás añadiendo los valores que selecciones, si le das clic nuevamente al elemento que previamente seleccionaste, éste se des-selecciona y se retira del array, caso contrario, se añade. Luego, buscas en el array el elemento "MX" que corresponde con el valor de la opción "México", de estar presente, se muestra la lista de Estados de México, caso contrario, estará oculta.

Código Javascript:
Ver original
  1. var opciones = document.getElementsByName("paises[]")[0],
  2.     mexico = document.getElementById("selectestado"),
  3.     s = []; //Valores seleccionados
  4.  
  5. opciones.addEventListener("click", function(e){
  6.     var valor = e.target.value, //Valor seleccionado
  7.         i = s.indexOf(valor); //Posición del valor en el array, si es que está
  8.    
  9.     if (i > -1) //Cuando un valor no está en el array, la función indexOf devuelve -1
  10.         s.splice(i, 1); //Retiramos el valor seleccionado
  11.     else
  12.         s.push(valor); //Añadimos el valor seleccionado
  13.    
  14.     mexico.style.display = s.indexOf("MX") > -1 ? "block" : "none";
  15. }, false);

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
  #9 (permalink)  
Antiguo 26/02/2014, 09:29
 
Fecha de Ingreso: febrero-2011
Mensajes: 195
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: mostrar input segun select multiple

Gracias Alexis88 eso es lo que necesitaba, sabes nadamas otro ultimo detalle ojala y me puedas seguir ayudando, si mi primer opcion es mexico y seleciono otro pais sin pulsar la tecla de control, no me oculta a los estados de mexico y si selecciono otra vez mexico pulsando la tecla de control me oculta los estados. habra forma de corregir esto??

Ojala y me haya explicado

Etiquetas: formulario, funcion, input, php, 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 11:53.