Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] 'Caché' en enlace onclick javascript

Estas en el tema de 'Caché' en enlace onclick javascript en el foro de Javascript en Foros del Web. Buenas, tengo un problema que no logro dar con la solución. Tengo un enlace javascript que oculta una capa, cuando se entra por primera vez ...
  #1 (permalink)  
Antiguo 15/10/2014, 07:29
El_Astur
Invitado
 
Mensajes: n/a
Puntos:
'Caché' en enlace onclick javascript

Buenas,

tengo un problema que no logro dar con la solución. Tengo un enlace javascript que oculta una capa, cuando se entra por primera vez con dar un solo click ya realiza la operación pero en cuanto se entra de nuevo hay que dar dos clicks al botón para que la realice. Este es mi código por si alguien puede ver una solución(la que da fallo es la MostrarOculta)r:

<li class="top type">
<a href="javascript:MostrarOcultar('hidden');" id="type" class="top_link">
<span class="down">buscar</span></a>
</li>
</ul>
<div class="cp_oculta" id="hidden" >
<input type="text" placeholder="Type your search" />
<button type="button" value="submit" onClick="javascript:closeThisDiv();"><img src="img/iconos/icerrar.png" /></button>
</div>

<script type='text/javascript'>
//<![CDATA[
document.write('<style type="text/css">div.cp_oculta{display: none;}</style>');
function MostrarOcultar(capa,enlace){
if (document.getElementById)
{
var aux = document.getElementById(capa).style;
aux.display = aux.display? "":"block";
}

}
//]]>
</script>
<script type='text/javascript'>
//<![CDATA[
function closeThisDiv() { var openDiv = document.getElementById('hidden'); openDiv.style.display = 'none'; }
//]]>
</script>

Un saludo
  #2 (permalink)  
Antiguo 15/10/2014, 15:00
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: 'Caché' en enlace onclick javascript

Solo tenías que hacer un pequeño cambio en la forma en la que tomas e intentas cambiar el valor del atributo display en la función 'MostrarOcultar':

Código Javascript:
Ver original
  1. function MostrarOcultar(capa,enlace){
  2.     var aux = document.getElementById(capa),
  3.         display = aux.style.display;
  4.     aux.style.display = display == "block" ? "none" : "block";
  5. }

Si te fijas, primero tomo al elemento a afectar, luego al valor de su propiedad display y luego hago la comparación y asignación de nuevo valor. Así es como debe de ser.

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 20/10/2014, 14:14
El_Astur
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: 'Caché' en enlace onclick javascript

Efectivamente Alexis, con ese cambio que me has comentado funciona a la perfección, muchas gracias!!!!
  #4 (permalink)  
Antiguo 30/10/2014, 15:02
El_Astur
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: 'Caché' en enlace onclick javascript

¿Y en un script como este se podría hacer lo mismo? pruebo lo de antes pero no funciona:

<script type="text/javascript">
//<![CDATA[
function capa()
{
var estilo = document.getElementById("capa").className;
if (estilo == "estilo1")
{
document.getElementById("capa").className = "estilo2";
}
else
{
document.getElementById("capa").className = "estilo1";
}
}
//]]>
</script>

Html
<div onclick="capa()"></div>
  #5 (permalink)  
Antiguo 30/10/2014, 15: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: 'Caché' en enlace onclick javascript

Un pequeño ejemplo:

Código HTML:
Ver original
  1. <div id = "capa" class = "estilo1"></div>
  2. <label onclick = "capa()">Cambia</label>

Código CSS:
Ver original
  1. .estilo1{
  2.     background: red;
  3. }
  4.  
  5. .estilo2{
  6.     background: green;
  7. }

Código Javascript:
Ver original
  1. function capa(){
  2.     var miCapa = document.getElementById("capa"),
  3.         estilo = miCapa.className;
  4.     if (estilo == "estilo1"){
  5.         miCapa.className = "estilo2";
  6.     }
  7.     else{
  8.         miCapa.className = "estilo1";
  9.     }
  10. }

Tengo una división de id 'capa' y clase 'estilo1', además de una etiqueta a la cual, al darle un clic, ejecuta la función 'capa'. En la hoja de estilos, tengo dos clases: estilo1 y estilo2. La primera, asigna un color rojo como fondo al elemento afectado, mientras que la segunda, asigna un color verde.

En la función, tomo al elemento de id 'capa' y a su clase, luego, si la clase que posee el elemento es 'estilo1', la cambio por 'estilo2' y viceversa.

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
  #6 (permalink)  
Antiguo 30/10/2014, 15:34
El_Astur
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: 'Caché' en enlace onclick javascript

Lo he probado y me sigue cacheando, ¿quizás pueda estar en conflicto con otros scripts? Es un botón que clickeo y abre un desplegable pero sigo teniendo que dar 2 click. ¿Y habría alguna manera de en vez de un id aplicar una clase que me sirviera para utilizar varias veces en un mismo archivo o diferentes? Es decir, tener varios desplegables y que funcionen todos tirando de esa función. Quizás aplicando document.getElementByClass?

Disculpa mi pesadez pero estoy aprendiendo con javascript y me surgen problemas que a pesar de buscar información y pegarme con ellos no logro solucionar.
  #7 (permalink)  
Antiguo 30/10/2014, 16:14
El_Astur
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: 'Caché' en enlace onclick javascript

Nada Alexis, lo he solucionado aunque me sigue cacheando y tengo que dar dos clicks para que abra el desplegable. Muchas gracias de nuevo por la ayuda!!!!

Etiquetas: enlace, input, onclick
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 16:15.