2010-06-26 3 views
18

würde ich gerne wissen, was der Unterschied zwischen javascript:; und javascript:void(0); ist, wenn ich sie in href attribure für a Anker (Link)Javascript :; vs javascript: void (0);

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

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

ich sie auf allen Browsern gleich nachschauen handeln, aber was ist der technische Unterschied ?

Grüße, Magdy

+0

Wichtiger Hinweis: Jede einzelne Antwort weist darauf hin, dass Onclick-Attribute sowieso nicht mehr verwendet werden sollten. Stellen Sie sicher, dass Sie diese sehr wichtige Information nicht verpassen :) – Matchu

+1

Ich weiß, ich demonstriere es nur, aber in meinem Code verwende ich immer Event-Handler nicht direkt in das HTML-Markup –

Antwort

15

One läuft JavaScript, die keine Aussagen, das andere läuft JavaScript, das die Anweisung 0 und kehrt dann undefined auswertet.

Neither should be used.

+2

+1 für entmutigende dieses Muster . Ist wirklich pedantisch, enthält der erste * eine * Aussage, die [leere Aussage] (http://bclary.com/2004/11/07/#a-12.3) ';': P – CMS

+0

+1, auch für die Entmutigung von diesem Muster. –

+3

Es stimmt nicht, dass im ersten Fall keine Anweisungen ausgewertet werden. Das Semikolon stellt eine leere Aussage dar, die ** eine Aussage ist. –

5

Nur dass diese javascript:void(0); besser lesbar ist und eine akzeptierte Konvention, dass dieser Code sagt tut nichts.

Es ist erwähnenswert, dass die Industriestandards bezüglich dieser Syntax einen langen Weg zurückgelegt haben. Sie sollten in Progressive Enhancement schauen.

5

Ich stimme mit David überein, dass keiner verwendet werden sollte. Das JavaScript-Pseudoprotokoll kann die Seite in einigen Browsern in einen Wartezustand versetzen, was unerwartete Folgen haben kann. Als ein Beispiel habe ich stundenlang versucht, eine Web-App zu debuggen, die IE6 zum Absturz brachte, wenn jemand kurz nach dem Laden der Seite auf einen javascript: link klickte. Es stellte sich heraus, dass die Seite, die den Wartezustand betrat, einen Konflikt mit einem Flash-Film hatte, der versuchte, sich zu initialisieren. Ich löste das Problem, indem sie die Verbindung mit einem in diesem Format zu ersetzen:

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

Das „return false“ verhindert, dass die Verbindung von tatsächlich befolgt werden.

+2

Also, wenn JavaScript verfügbar ist, wird es 'DoSomething' und wenn es nicht ... es Links zum Anfang der Seite. Das wird fast immer eine schreckliche Fallback-Position sein. – Quentin

+0

Hinweis aus der Zukunft: Gott sei Dank, wir müssen uns nicht länger um IE6 sorgen! –