2010-06-26 29 views
18

Me gustaría saber cuál es la diferencia entre javascript:; y javascript:void(0); si las uso en href attribure para a anclaje (enlace)javascript :; vs javascript: void (0);

<a href="javascript:;" onclick="DoSomething();">Link</a> 

<a href="javascript:void(0);" onclick="DoSomething();">Link</a> 

veo actuando de la misma en todos los navegadores, pero ¿cuál es la diferencia técnica ?

Saludos, Magdy

+0

Nota importante: cada respuesta aquí indica que los atributos 'onclick' ya no se deben usar. Asegúrate de no perderte esa información tan importante :) – Matchu

+1

Lo sé, solo estoy demostrando que lo estoy usando, pero en mi código siempre utilizo el controlador de eventos sin ponerlo directamente en el marcado HTML –

Respuesta

15

Una ejecuta JavaScript que no tiene declaraciones, el otro ejecuta JavaScript que evalúa el estado de 0 y luego vuelve undefined.

Neither should be used.

+2

+1 para desalentar este patrón . Siendo realmente pedante, en realidad el primero contiene * una * declaración, el [Empty Statement] (http://bclary.com/2004/11/07/#a-12.3) ';': P – CMS

+0

+1, también para el desaliento de este patrón. –

+3

No es cierto que no se evalúen las declaraciones en el primer caso. El punto y coma representa una declaración vacía, que ** es ** una declaración. –

5

Sólo que esta última javascript:void(0); es más legible y una convención aceptada dice que este código no hace nada .

Vale la pena señalar que los estándares de la industria han recorrido un largo camino con respecto a esta sintaxis. Deberías mirar hacia la mejora progresiva.

5

Estoy de acuerdo con David en que ninguno de los dos debe usarse. El pseudo protocolo de javascript puede poner la página en estado de espera en algunos navegadores, lo que puede tener consecuencias inesperadas. Como un ejemplo, pasé horas intentando depurar una aplicación web que estaba fallando IE6 cada vez que alguien hacía clic en un enlace de JavaScript poco después de la página cargada. Resultó que la página que entraba en estado de espera entraba en conflicto con una película Flash que intentaba inicializarse. He resuelto el problema sustituyendo el enlace con uno en este formato:

<a href="#" onclick="DoSomething(); return false;">Link</a> 

El "return false" impide el enlace de realidad siendo seguido.

+2

Entonces, si JavaScript está disponible, 'DoSomething' y si no lo está ... lo vincula a la parte superior de la página. Eso casi siempre va a ser una posición de repliegue horrible. – Quentin

+0

Nota del futuro: ¡gracias a Dios que ya no tenemos que preocuparnos por IE6! –

Cuestiones relacionadas