2011-02-08 12 views
5

Tengo una página web con algunos enlaces, y tengo que interceptar el evento de enlace de clic de jQuery. La tarea se finaliza bien, pero luego surge un problema: si el usuario hace clic en un enlace cuando JavaScript no termina de cargarse, se vincula a otra página (lo cual es un error).Evitar hacer clic en el enlace mientras carga la página

He intentado encontrar una manera de desactivar el enlace-clic antes de que la carga de la página termine, pero la mejor solución ahora es que debo agregar onclick="return false;" a mis enlaces, lo cual no es muy elegante. ¿Hay alguna solución mejor?

Gracias por cualquier ayuda,

+3

¿Por qué no enviar href como otro atributo y luego copiar ese atributo a href cuando el enlace está listo para hacer clic en? – jrockway

+0

@jrockway: gracias por la recomendación, pero creo que no es conveniente hacerlo. –

Respuesta

0

He aquí una solución que he resuelto: utilizar un enmascarador delante del enlace para evitar que se produzca un clic.

<div class="LinkMasker"></div> 

.LinkMasker { 
    position: absolute; 
    z-index: 999; 
    width: ...px; 
    height: ...px; 
} 

Después de carga de la página & mi evento están registrados, se quita el enmascarador:

$('.LinkMasker').remove(); 
+0

Sé que es una minoría, pero los usuarios con Javascript desactivado no pueden usar su sitio de esta manera. – kapa

+0

@kapa: es triste, pero ninguno de los métodos aquí funcionará sin javascript. –

+0

Pero esas secuencias de comandos simplemente no se ejecutarán, y los enlaces siguen siendo clicables. A su vez, se desactiva todo, y no se puede usar nada. – kapa

5

Usted podría tratar de usar un script de inicialización:

<script language="javascript"> 

var loaded = false; 

function SetLoaded() { loaded = true; } 

window.onload = SetLoaded; 

</script> 

continuación, puede añadir a su onclick="return loaded;" href. Dado que la carga no será verdadera hasta que la página se cargue, debería deshabilitarse cualquier enlace que se agregue.

1

Haga que jQuery configure los hrefs en los enlaces en su document.ready(). Tal vez prefija sus enlaces con un '#', y jQuery los elimine.

+0

Gracias, aunque no creo que esto sea una buena práctica :( –

3

Hoy que estaba frente a este problema, así que hice R & D y cuenta de otra forma de la misma. document.readyState estará 'completo' después de cargar la página para que pueda verificar su valor como.

if(document.readyState=='complete') 
{ 
    //// call script or do anything which you want to do. 
} 
+0

th Gracias por su respuesta, en realidad lo que quiero es evitar el clic hasta que termine de cargar la página. De todos modos, gracias por tu actitud. No muchos responden la pregunta anterior –

+0

¿Qué tal si (! Document.readyState == 'complete') then? –

Cuestiones relacionadas