Foros del Web » Programando para Internet » Javascript »

Mostrar / Ocultar div

Estas en el tema de Mostrar / Ocultar div en el foro de Javascript en Foros del Web. Hola, estaba creando un script para ocultar / mostrar un parrafo y todo me funciona bien si en los estilos está display: block pero si ...
  #1 (permalink)  
Antiguo 14/06/2008, 15:30
 
Fecha de Ingreso: marzo-2008
Mensajes: 166
Antigüedad: 16 años
Puntos: 5
Mostrar / Ocultar div

Hola, estaba creando un script para ocultar / mostrar un parrafo y todo me funciona bien si en los estilos está display: block pero si lo cambio a display: none tengo que dar 2 click al enlace para que empieze a funcionar. ¿Alguien sabe por qué pasa esto?
Vean a lo que me refiero:

http://www.blogstyle.com.mx/ejercicio14.html

Les agradecería enormemente si me ayudan.
  #2 (permalink)  
Antiguo 14/06/2008, 15:47
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Mostrar / Ocultar div

Probá agregando esto al final de tu bloque de código javascript:
Código PHP:
window.onload=function(){
var 
p,i
p=document.getElementsByTagName('p');
for(
i=0;i!=p.length;i++)
muestraOculta(i+1);

  #3 (permalink)  
Antiguo 14/06/2008, 15:53
 
Fecha de Ingreso: marzo-2008
Mensajes: 166
Antigüedad: 16 años
Puntos: 5
Respuesta: Mostrar / Ocultar div

Si funcionó ^^ ¡GRACIAS! .... solo que no se por que, si no te es mucha molestia me podrías decir que estaba mal, es que lo tengo que adaptar a una página.

Saludos.
  #4 (permalink)  
Antiguo 14/06/2008, 16:05
Avatar de Hamn  
Fecha de Ingreso: marzo-2008
Ubicación: Cali-Colombia
Mensajes: 212
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Mostrar / Ocultar div

Tambien podes usar este

ponlo despues del </Div> a ocultar o mostrar
Código PHP:
<a href="#" style='text-decoration:none;color:#FFCC00;' onClick="Alternar('test')"Mostrar/Ocultar</a></td
Recorda que podes cambiar los atributos al codigo y obtener cualquier otro color del texto.

Pero antes pon este scrip entre las etiquetas <Head></Head>
Código PHP:
<script>
function 
Alternar(Seccion){
cosa=document.getElementById(Seccion).style;
cosa.display = (cosa.display=="none")?"":"none"
}
</script> 
Espero sea una forma alternativa y les sirva.
  #5 (permalink)  
Antiguo 14/06/2008, 16:06
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Mostrar / Ocultar div

Pasa que en primera instancia, el estilo display de los elementos está vacío (lo comprobás escribiendo esto en la barra de direcciones y haciendo click en el botón ir:javascript:alert(document.getElementById('conte nidos_1').style.display)
). Por eso, siempre entra en la primera parte del condicional de tu función al hacer click por primera vez, mientras que vos esparás que entre en la segunda parte.
  #6 (permalink)  
Antiguo 14/06/2008, 16:33
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Mostrar / Ocultar div

Hey man, disculpa por colgarme de tu tema, pero me ocurre lo mismo, pero con jQuery...

A ver si me pueden ayudar =(

Estoy usando este código

Código PHP:
var LoadPhotosJQuery = {

    
load : function()   {
        var 
links = $(".box_link");
        
        
links.each( function(e) {
           
            var 
elements links[e].id.split('#')[1];
           
            $(
links[e]).click( function(ev) {
                
ev.preventDefault();

                $.
ajax({
                    
type 'get' ,
                    
url  "ajaxfiles/load_photos.php" ,
                    
data : {orderBy:elements} ,
                    
dataType "html" ,             
                    
error : function(er) { alert(er); } ,              
                    
success : function(c) {  
                        $(
'#'+elements).text(c);
                        $(
'#'+elements).slideToggle(200);
                    }                            
                });
            });
        });
    }    

El problema está en estas líneas

$('#'+elements).text(c);
$('#'+elements).slideToggle(200);


Si lo pongo en ese orden, y clickeo algún link, me muestra rápidamente el div y se oculta de inmediato... pero si cambio el orden de estas líneas, al primer click no muestra nada y al segundo comienza a funcionar correctamente... no sé como solucionarlo... Gracias =)
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #7 (permalink)  
Antiguo 14/06/2008, 16:45
 
Fecha de Ingreso: marzo-2008
Mensajes: 166
Antigüedad: 16 años
Puntos: 5
Respuesta: Mostrar / Ocultar div

SpiderBoy no hay problema, mientras consigas ayuda....

Panino5001 Mil gracias enserio, ya hice la prueba y tienes razón, no lee el estilo del display del elemento a la primera... se me hace muy raro y otra vez no se por qué xD.

Hamn también probe tu script a ver que tal y si funciona solo que también hay que dar dos clicks para que funcione....

Mientras que descubro por qué no lo lee a la primera el estilo uso la solución de Panino5001 ¡GRACIAS! a todos.
  #8 (permalink)  
Antiguo 15/06/2008, 07:15
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Mostrar / Ocultar div

Ya lo solucioné. Tomé en cuenta la info qué dio Panino, y lo arreglé con esto...

if(document.getElementById(elements).style.display =="") {
document.getElementById(elements).style.display="n one";
}

Ya qué el estilo display estaba vacío, sólo debía darle el estilo manualmente...

Gracias Panino por la info =).
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #9 (permalink)  
Antiguo 15/06/2008, 07:30
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 11 meses
Puntos: 834
Respuesta: Mostrar / Ocultar div

En realidad no es raro, porque tu estilo display está definido en una regla css, y para acceder al estilo desde javascript en el caso de las reglas se hace de otra manera. Diferente sería si aplicaras el estilo inicial inline, es decir definiéndolo con un atributo style. Un ejemplo de esto que te digo sería este, que como verás sí funciona como esperabas:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml"><head>


<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Ejercicio 14 DOM b&#239;¿½sico y atributos XHTML</title>

    
<script type="text/javascript">
function 
muestraOculta(id) {
    var 
elemento document.getElementById('contenidos_'+id);
    var 
enlace document.getElementById('enlace_'+id);
    
    if(
elemento.style.display == "" || elemento.style.display == "block") {
        
elemento.style.display "none";
        
enlace.innerHTML 'Mostrar contenidos';
    }
    else {
        
elemento.style.display "block";
        
enlace.innerHTML 'Ocultar contenidos';
    }
}
</script></head><body>

<p style="display: none;" id="contenidos_1">[1] Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Sed mattis enim vitae orci. Phasellus libero. Maecenas
nisl arcu, consequat congue, commodo nec, commodo ultricies, turpis.
Quisque sapien nunc, posuere vitae, rutrum et, luctus at, pede.
Pellentesque massa ante, ornare id, aliquam vitae, ultrices porttitor,
pede. Nullam sit amet nisl elementum elit convallis malesuada.
Phasellus magna sem, semper quis, faucibus ut, rhoncus non, mi. Duis
pellentesque, felis eu adipiscing ullamcorper, odio urna consequat
arcu, at posuere ante quam non dolor. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Duis scelerisque.</p>
<a id="enlace_1" href="#" onclick="muestraOculta('1'); return false;">Mostrar contenidos</a>

<br>

<p style="display: none;" id="contenidos_2">[2] Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Sed mattis enim vitae orci. Phasellus libero. Maecenas
nisl arcu, consequat congue, commodo nec, commodo ultricies, turpis.
Quisque sapien nunc, posuere vitae, rutrum et, luctus at, pede.
Pellentesque massa ante, ornare id, aliquam vitae, ultrices porttitor,
pede. Nullam sit amet nisl elementum elit convallis malesuada.
Phasellus magna sem, semper quis, faucibus ut, rhoncus non, mi. Duis
pellentesque, felis eu adipiscing ullamcorper, odio urna consequat
arcu, at posuere ante quam non dolor. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Duis scelerisque.</p>
<a id="enlace_2" href="#" onclick="muestraOculta('2'); return false;">Mostrar contenidos</a>

<br>
<p style="display: none;" id="contenidos_3">[3] Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Sed mattis enim vitae orci. Phasellus libero. Maecenas
nisl arcu, consequat congue, commodo nec, commodo ultricies, turpis.
Quisque sapien nunc, posuere vitae, rutrum et, luctus at, pede.
Pellentesque massa ante, ornare id, aliquam vitae, ultrices porttitor,
pede. Nullam sit amet nisl elementum elit convallis malesuada.
Phasellus magna sem, semper quis, faucibus ut, rhoncus non, mi. Duis
pellentesque, felis eu adipiscing ullamcorper, odio urna consequat
arcu, at posuere ante quam non dolor. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Duis scelerisque.</p>
<a id="enlace_3" href="#" onclick="muestraOculta('3'); return false;">Mostrar contenidos</a>

</body></html> 
  #10 (permalink)  
Antiguo 07/08/2008, 15:56
 
Fecha de Ingreso: agosto-2008
Ubicación: Bogotá
Mensajes: 148
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Mostrar / Ocultar div

Hola. La solución de Panino5001 al problema de Gastonike funciona, pero ¿cómo se podría hacer para que, por ejemplo, cada uno de esos tres enlaces tenga un nombre diferente?

Edito: Ya encontré otra solución...

Última edición por sortega; 07/08/2008 a las 16:17
  #11 (permalink)  
Antiguo 07/08/2008, 21:43
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Mostrar / Ocultar div

si ya la encontraste seria bueno que la postearas, quizá alguien mas la este buscando...

Para evitar el problema tambien se puede definir la regla desde javascrip en la funcion que hace el set para el efecto. Esto es especialmente util cuando sabes el estado inicial que quieres que tengan tus elementos. Este problema es generado por que Javascript no puede acceder a los estilos CSS que no han sido declarados mediante javascript.
__________________
twitter: @imbuzu
  #12 (permalink)  
Antiguo 08/08/2008, 09:38
 
Fecha de Ingreso: agosto-2008
Ubicación: Bogotá
Mensajes: 148
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Mostrar / Ocultar div

Cita:
Iniciado por buzu Ver Mensaje
si ya la encontraste seria bueno que la postearas, quizá alguien mas la este buscando...
http://www.dynamicdrive.com/dynamicindex17/animatedcollapse.htm
  #13 (permalink)  
Antiguo 08/08/2008, 15:52
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Mostrar / Ocultar div

Bien, solo te falto convertirla en enlace

http://www.dynamicdrive.com/dynamici...edcollapse.htm

See, con ganas de joder.....jajaja espero que te lo tomes con calma... solo que hoy me desperte con ganas de hacer gracia....
__________________
twitter: @imbuzu
  #14 (permalink)  
Antiguo 09/08/2008, 14:49
 
Fecha de Ingreso: agosto-2008
Ubicación: Bogotá
Mensajes: 148
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Mostrar / Ocultar div

Cita:
Iniciado por buzu Ver Mensaje
Bien, solo te falto convertirla en enlace

http://www.dynamicdrive.com/dynamicindex17/animatedcollapse.htm

See, con ganas de joder.....jajaja espero que te lo tomes con calma... solo que hoy me desperte con ganas de hacer gracia....
jajaja, pero si aún tienes ganas de hacer más gracia, tons quéjate con el administrador del foro, porque no puedo poner enlaces hasta tener treinta mensajes como mínimo.

Nisiquiera puedo responder tu cita con tu enlace, ¿puedes creerlo?


Cita:
Por motivos anti-spam, solo es posible incluir enlaces o compartir direcciones web en sus mensajes, luego de que el usuario tenga más de 30 días de antigüedad y más de 30 mensajes publicados en el foro. Disculpe las molestias.
  #15 (permalink)  
Antiguo 09/08/2008, 18:21
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Mostrar / Ocultar div

No te preocupes, yo entiendo esa situación. Pase por las mismas cuando recién empece en el foro.... La buena noticia es que ya solo te falta 19 jajaja.
__________________
twitter: @imbuzu
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 14:50.