Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Mostrar varios DIV con el mismo nombre al pulsar enlace

Estas en el tema de Mostrar varios DIV con el mismo nombre al pulsar enlace en el foro de Javascript en Foros del Web. Hola a tod@s, tengo el siguiente problema: tengo una página con una lista enorme de opciones para marcar, por lo que quería ocultar una parte ...
  #1 (permalink)  
Antiguo 21/04/2015, 01:55
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 4 meses
Puntos: 8
Mostrar varios DIV con el mismo nombre al pulsar enlace

Hola a tod@s, tengo el siguiente problema: tengo una página con una lista enorme de opciones para marcar, por lo que quería ocultar una parte de estas opciones (van anidadas) y que se muestren solo al pulsar el enlace de la categoría padre. La página se va creando de forma dinámica mediante asp. El problema es que de esta forma, cuando se va creando, en lugar de crear un unico DIV que contenga todas las subcategorías, se crea un DIV para cada una de ellas, y todas con el mismo nombre. Al pulsar el enlace para que me las muestre, solo saca la primera, y las demás siguen desaparecidas. ¿Hay alguna forma de hacer que las muestre todas, a pesar de ser varias con el mismo nombre? También me serviría modificar la funcion para que mostrase varios DIV con diferente nombre, aunque no tengo muy claro como montar eso. Os dejo el código de lo que tengo de momento,a ver si alguien me puede echar una mano.

La función que muestra u oculta al pulsar:
Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. function show(bloq) {
  3.   obj = document.getElementById(bloq);
  4.   obj.style.display = (obj.style.display=='none') ? 'block' : 'none';
  5. }
  6. </script>

El código con los diferentes niveles y DIV de las opciones

Código HTML:
Ver original
  1. <input type="checkbox" name="sector" value="111">
  2.             <a href="#" onClick="show('oculto1')">MOBILIARIO PARA EL HOGAR</a><br>
  3.          
  4.             <div id="oculto1" style="display:none;">
  5.             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  6.             <input type="checkbox" name="sector" value="1110">
  7.             MUEBLE  CLASICO<br></div>
  8.          
  9.             <div id="oculto1" style="display:none;">
  10.             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  11.             <input type="checkbox" name="sector" value="1111">
  12.             MUEBLE MODERNO<br></div>
  13.          
  14.             <div id="oculto1" style="display:none;">
  15.             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  16.             <input type="checkbox" name="sector" value="1112">
  17.             MUEBLE RUSTICO<br></div>
  18.          
  19.             <div id="oculto1" style="display:none;">
  20.             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  21.             <input type="checkbox" name="sector" value="1113">
  22.             MUEBLE TAPIZADO<br></div>
  23.          
  24.             <div id="oculto1" style="display:none;">
  25.             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  26.             <input type="checkbox" name="sector" value="1114">
  27.             MUEBLE DISEÑO / VANGUARDIA<br></div>
  28.          
  29.             <div id="oculto1" style="display:none;">
  30.             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  31.             <input type="checkbox" name="sector" value="1115">
  32.             MUEBLES DE TERRAZA Y JARDIN<br></div>
  33.          
  34.             <div id="oculto1" style="display:none;">
  35.             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  36.             <input type="checkbox" name="sector" value="1116">
  37.             MOBILIARIO INFANTIL<br></div>
  38.          
  39.             <div id="oculto1" style="display:none;">
  40.             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  41.             <input type="checkbox" name="sector" value="1117">
  42.             MOBILIARIO DE BAÑO<br></div>
  43.          
  44.             <div id="oculto1" style="display:none;">
  45.             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  46.             <input type="checkbox" name="sector" value="1118">
  47.             MOBILIARIO DE COCINA<br></div>
  48.          
  49.             <div id="oculto1" style="display:none;">
  50.             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  51.             <input type="checkbox" name="sector" value="1119">
  52.             OTRO MOBILIARIO PARA EL HOGAR<br></div>
  53.          
  54.             <div id="oculto1" style="display:none;">
  55.             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  56.             <input type="checkbox" name="sector" value="1121">
  57.             MONTADORES INSTALACIONES<br></div>
__________________
Vayamos por Partes :: Jack el Destripador
  #2 (permalink)  
Antiguo 22/04/2015, 00:54
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 4 meses
Puntos: 8
Respuesta: Mostrar varios DIV con el mismo nombre al pulsar enlace

A nadie se le ocurre??
__________________
Vayamos por Partes :: Jack el Destripador
  #3 (permalink)  
Antiguo 22/04/2015, 01:26
 
Fecha de Ingreso: marzo-2015
Mensajes: 42
Antigüedad: 9 años, 1 mes
Puntos: 2
Respuesta: Mostrar varios DIV con el mismo nombre al pulsar enlace

Pero a ver, según recuerdo de los estándares de W3C, el id debe ser único en toda la página. Por esa razón no se puede tratar el atributo "id" como si fuera un "class", porque para eso está el "class"

Yo creo que el problema lo tienes en:

Cita:
El problema es que de esta forma, cuando se va creando, en lugar de crear un unico DIV que contenga todas las subcategorías, se crea un DIV para cada una de ellas, y todas con el mismo nombre.
¿No puedes crear un "class" con el mismo nombre en vez de con un "id"?
  #4 (permalink)  
Antiguo 22/04/2015, 01:28
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 4 meses
Puntos: 8
Respuesta: Mostrar varios DIV con el mismo nombre al pulsar enlace

Cita:
Iniciado por Tusade Ver Mensaje
Pero a ver, según recuerdo de los estándares de W3C, el id debe ser único en toda la página. Por esa razón no se puede tratar el atributo "id" como si fuera un "class", porque para eso está el "class"

Yo creo que el problema lo tienes en:



¿No puedes crear un "class" con el mismo nombre en vez de con un "id"?
¿Me puedes poner algún ejemplo? No estoy demasiado familiarizado con javascript y mucho menos con esto del "class"
__________________
Vayamos por Partes :: Jack el Destripador
  #5 (permalink)  
Antiguo 22/04/2015, 01:59
 
Fecha de Ingreso: marzo-2015
Mensajes: 42
Antigüedad: 9 años, 1 mes
Puntos: 2
Respuesta: Mostrar varios DIV con el mismo nombre al pulsar enlace

Me explico: tienes que sustituir el id="oculto1" por class="oculto1" en los atributos de todos las cajas div.

Tú tienes el siguiente código que muestra una caja oculta repetida varias veces:

Código HTML:
Ver original
  1. <a href="#" onClick="show('oculto1')">MOBILIARIO PARA EL HOGAR</a><br>
  2. <div id="oculto1" style="display:none;">Esto es una caja oculta</div>
  3. <div id="oculto1" style="display:none;">Esto es otra caja oculta</div>
  4. <div id="oculto1" style="display:none;">Esto es una tercera caja oculta</div>

Pues yo le cambiaría el atributo del div:

Código HTML:
Ver original
  1. <div class="oculto1" style="display:none;">Esto es una caja oculta</div>
  2. <div class="oculto1" style="display:none;">Esto es otra caja oculta</div>
  3. <div class="oculto1" style="display:none;">Esto es una tercera caja oculta</div>

Luego, nos vamos a Javascript y escribimos un bucle "for":

Código Javascript:
Ver original
  1. function show(bloq) {
  2.       var obj = document.getElementsByClassName(bloq); /* Esto nos recoge un array de todos los
  3.       elementos cuyo atributo class sea el contenido de la variable "bloq" */
  4.       for (var i = 0; i<obj.length; ++i) { /* Bucle for, le estamos diciendo que se ejecute según tantas
  5.       veces encuentre un elemento con atributo class="oculto1" */
  6.               obj[i].style.display = (obj[i].style.display=='none') ? 'block' : 'none'; /* No olvidemos poner
  7.                un [i] para identificar el elemento de un array. */
  8.       }
  9. }

Eso es lo que yo haría

EDIT: Ah, y te ha faltado declarar la variable "obj" en javascript (ponerle un "var" delante de obj), según veo.

Última edición por Tusade; 22/04/2015 a las 02:11
  #6 (permalink)  
Antiguo 22/04/2015, 02:33
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 varios DIV con el mismo nombre al pulsar enlace

Cita:
Iniciado por Tusade Ver Mensaje
te ha faltado declarar la variable "obj" en javascript (ponerle un "var" delante de obj), según veo.
Si no pretende que el ámbito de la variable se restrinja al de la función, entonces, no es necesario, aunque —como se aconseja en la documentación existente— es lo recomendable.

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 22/04/2015, 04:36
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 4 meses
Puntos: 8
Respuesta: Mostrar varios DIV con el mismo nombre al pulsar enlace

Cita:
Iniciado por Tusade Ver Mensaje
Me explico: tienes que sustituir el id="oculto1" por class="oculto1" en los atributos de todos las cajas div.

Tú tienes el siguiente código que muestra una caja oculta repetida varias veces:

Código HTML:
Ver original
  1. <a href="#" onClick="show('oculto1')">MOBILIARIO PARA EL HOGAR</a><br>
  2. <div id="oculto1" style="display:none;">Esto es una caja oculta</div>
  3. <div id="oculto1" style="display:none;">Esto es otra caja oculta</div>
  4. <div id="oculto1" style="display:none;">Esto es una tercera caja oculta</div>

Pues yo le cambiaría el atributo del div:

Código HTML:
Ver original
  1. <div class="oculto1" style="display:none;">Esto es una caja oculta</div>
  2. <div class="oculto1" style="display:none;">Esto es otra caja oculta</div>
  3. <div class="oculto1" style="display:none;">Esto es una tercera caja oculta</div>

Luego, nos vamos a Javascript y escribimos un bucle "for":

Código Javascript:
Ver original
  1. function show(bloq) {
  2.       var obj = document.getElementsByClassName(bloq); /* Esto nos recoge un array de todos los
  3.       elementos cuyo atributo class sea el contenido de la variable "bloq" */
  4.       for (var i = 0; i<obj.length; ++i) { /* Bucle for, le estamos diciendo que se ejecute según tantas
  5.       veces encuentre un elemento con atributo class="oculto1" */
  6.               obj[i].style.display = (obj[i].style.display=='none') ? 'block' : 'none'; /* No olvidemos poner
  7.                un [i] para identificar el elemento de un array. */
  8.       }
  9. }

Eso es lo que yo haría

EDIT: Ah, y te ha faltado declarar la variable "obj" en javascript (ponerle un "var" delante de obj), según veo.

Probado... y funcionando a la perfección, muchísimas gracias !!!! Ahora solo me falta hacer lo mismo con los diferentes niveles de anidamiento, pero es cuestión de darle un par de vueltas. Muchas gracias de nuevo.
__________________
Vayamos por Partes :: Jack el Destripador

Etiquetas: enlace, funcion, input, nombre, pulsar
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 10:04.