Foros del Web » Programando para Internet » Javascript »

duda en script muy sencillo

Estas en el tema de duda en script muy sencillo en el foro de Javascript en Foros del Web. Hola a todos, aqui está el problema El Css @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código CSS: Ver original #capauno , #capados { width : 350px ; height : ...
  #1 (permalink)  
Antiguo 17/10/2010, 21:17
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
duda en script muy sencillo

Hola a todos, aqui está el problema


El Css

Código CSS:
Ver original
  1. #capauno, #capados{
  2. width: 350px;
  3. height: 30px;
  4. border: solid 1px #000;
  5. background-color: #EE922B;
  6. padding: 5px;
  7. display: none;
  8. }


El Html

Código HTML:
Ver original
  1. <p><a href="#" onclick="mostrarcapa('capauno')">Mostrar-Ocultar div uno</a></p>
  2. <div id="capauno">Contenido de div uno</div>
  3. <p><a href="#" onclick="mostrarcapa('capados')">Mostrar-Ocultar div dos</a></p>
  4. <div id="capados">Contenido de div dos</div>
  5. <div>

La Script

Código Javascript:
Ver original
  1. /* ---------------------------- */
  2. /* MostrarOcultar Capas         */
  3. /* ---------------------------- */
  4. function mostrarcapa(layer){
  5.     var miCapa=document.getElementById(layer).style.display;
  6.     if(miCapa=="none"){
  7.         document.getElementById(layer).style.display="block";
  8.     } else {
  9.         document.getElementById(layer).style.display="none";
  10.         }
  11. }

la demo
http://foros.emprear.com/mostrarcapas/mostrarcapas.html

la pregunta:
por que cuando entro la primera vez a la página (o después de recargarla) necesito de 2 clicks para mostrar las capas ocultas, después de que aparecieron por primera vez, ya se ejecutan con normalidad , con un click basta.

Alguna idea?

Saludos y gracias
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #2 (permalink)  
Antiguo 17/10/2010, 23:45
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 9 meses
Puntos: 1146
Respuesta: duda en script muy sencillo

no recuerdo exactamente el porque pero la solucion esta en aplicar el display:none directamente en el html y no en una clase

Código CSS:
Ver original
  1. #capauno, #capados{
  2. width: 350px;
  3. height: 30px;
  4. border: solid 1px #000;
  5. background-color: #EE922B;
  6. padding: 5px;
  7. }
Código HTML:
Ver original
  1. <p><a href="#" onclick="mostrarcapa('capauno')">Mostrar-Ocultar div uno</a></p>
  2. <div id="capauno" style="display: none;">Contenido de div uno</div>
  3.  
  4. <p><a href="#" onclick="mostrarcapa('capados')">Mostrar-Ocultar div dos</a></p>
  5. <div id="capados" style="display: none;">Contenido de div dos</div>
  #3 (permalink)  
Antiguo 17/10/2010, 23:48
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: duda en script muy sencillo

Hola:

Lo que pasa es que no lo tienes definido en línea... prueba así:

Código:
<p><a href="#" onclick="mostrarcapa('capauno')">Mostrar-Ocultar div uno</a></p>
<div id="capauno" style="display: none">Contenido de div uno</div>
<p><a href="#" onclick="mostrarcapa('capados')">Mostrar-Ocultar div dos</a></p>
<div id="capados" style="display: none">Contenido de div dos</div>
<div>
Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 18/10/2010, 00:11
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: duda en script muy sencillo

Muchas gracias caballeros, solucionado.
Así, como de paso, hay alguna teoría que justifique este comportamiento?


Gracias a ambos
saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 18/10/2010, 00:49
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: duda en script muy sencillo

la propiedad style de los elementos viene representando el atributo style. fijate que los estilos no estaban definido en el atributo sino en el elemento <style>. ¿por qué se hace así o por qué el objeto style no hereda las propiedades css? no es la respuesta definitiva pero debe ser porque hay diferentes formas de scripting. para editar las propiedades de una hoja de estilo -<style> o archivo css- tienes que navegar por las propiedades DOM del objeto styleSheets. de todos modos, en tu caso lo que interesaba era obtener el valor para determinar que nuevo valor asignar. para que eso sea posible tienes que usar la función getComputedStyle el cual devuelve un objeto style con las propiedades que estan afectando al elemento sin importar donde esta definida ese valor.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 21/10/2010, 15:38
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: duda en script muy sencillo

O con currentStyle. También existe runtimeStyle, pero es para estilos aplicados con JS. Al final dejo un link que explica cómo y dónde se usan, con algún ejemplo.

Aunque en este caso no es necesario usar ninguna. Ya que pasé por aquí a poner el enlace aprovecho el mensaje y te cuento por qué debes usar dos clicks, emprear. Seguro que si te detenías a pensarlo 2 minutos también lo descubrías.

Supongamos que tienes el siguiente párrafo en el body :

Código:
<p id="miParrafo"> QWERTYUIOP.</p>
Y en la hoja de estilos tiene asignado un color rojo, así

Código:
<style>
#miParrafo {color:red; }
</style>
Ahora se te ocurre agregar un botón que llame a la función que te permite alternar el color al párrafo entre 'rojo' y 'verde'

Código:
<input type=button id="rojoVerde" value="Alterna Color" onclick="cambia()">
Y esa función es

Código:
<script>
function cambia() {
 if (document.getElementById('miParrafo').style.color == 'red') {
  document.getElementById('miParrafo').style.color = 'green';
 }
 else {
  (document.getElementById('miParrafo').style.color = 'red';
 }
}

</script>
La lógica es así : "Si en el documento hay un elemento con el identificador 'miParrafo' que tiene el estilo de color 'red', entonces al elemento con el identificador 'miParrafo' se le pone el estilo de color 'green'; de cualquier otra forma, al elemento con el identificador 'miParrafo' se le pone el estilo de color 'red'."
El punto, tal como explicaron más arriba, es que en nuestro ejemplo el elemento no tiene metido ningún estilo, porque se lo damos desde la etiqueta <style>. Para que "(getElementById('miParrafo')" lo encuentre debería estar como

Código:
<p ... style="color: red;">
Por lo tanto, a la pregunta del escript sobre si la condición de "getElementById('miParrafo').style.color" es igual a "red", la respuesta será No, ni "red", ni "green", ni nada. Porque no tiene ningún "style=''" como atributo.
Así que la función toma el siguiente camino, que es ponerle en forma dinámica el "style='color: red;'".
Ahora sí tiene el atributo, pero para quien lo mira, con ese atributo no cambia nada, porque desde la hoja de estilos o desde un estilo in line el texto sigue de color rojo. Entonces en el siguiente click ya encuentra el atributo con su valor; y como es 'red' lo cambia a 'green'.

La solución es la más simple de todas :

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<title>ALTERNA ENTRE ROJO Y VERDE.</title>

<script type="text/javascript">
function cambia() {
 if ((document.getElementById('miParrafo').style.color) == 'green') {
  document.getElementById('miParrafo').style.color = 'red';
 }
 else {
  document.getElementById('miParrafo').style.color = 'green';
 }
}

</script>
<style type="text/css">
#miParrafo {color:red; }

</style>
</head>
<body>
<p id="miParrafo"> QWERTYUIOP.</p>
<input type=button value="Alterna Color" onclick="cambia()">

</body>
</html>
visualizar un atributo de un estilo

Interpretar una clase CSS por medio de Javascript

Texto transparente en Firefox (como filter chroma)

Mostrar el html generado de una funcion, como????
  #7 (permalink)  
Antiguo 21/10/2010, 16:06
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: duda en script muy sencillo

EXCELENTE !!!


__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: sencillo
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 18:44.