2012-04-20 14 views
8

Czy jest jakaś różnica międzyonclick = "javascript: func()" w porównaniu z onclick = "func()"

<input type="submit" value="Register" onclick="javascript:submitTheForm();"> 

i

<input type="submit" value="Register" onclick="submitTheForm();"> 

powinienem używać javascript: przed wywołaniem funkcji JS ?

+4

Nie musisz .. –

+0

na ***** uruchamia javascript bez definiowania ich "javascript:" – Tobi

+0

tak czy inaczej, nie jest dobrą praktyką używać inline – Joseph

Odpowiedz

10

javascript: wewnątrz handlerka onwhatever="" jest no-op. Zawartość tego atrybutu jest zawsze JavaScript, więcdefiniuje label - ale poza blokiem lub pętlą switch (gdzie można go użyć do pozycji etykiety), nie robi nic.

Jednak odradza się korzystanie z wbudowanych programów obsługi zdarzeń, ponieważ do rejestrowania funkcji obsługi zdarzeń służy betterways.


Choć nie wspomniano w pytaniu, to warto zauważyć, że za pomocą javascript: w atrybucie href działa (i nie jest to rzeczywiście konieczne), ale jest bardzo zniechęcony do różnych powodów:

  • this nie wskazuje na element
  • Wywołanie funkcji zwracającej wartość powoduje, że przeglądarka opuści stronę
  • Kliknięcie łącza z wyłączonymi przerwami JavaScript
  • Próbuje otworzyć link w nowym oknie/karcie łamie

Tak więc, jeśli naprawdę trzeba użyć zdarzenia inline, zawsze używaj onclick="" itd bez javascript:.

+0

Możesz jej używać również z 'break' i dowolną instrukcją. Nie musi być używane razem z 'przełącznikiem'. –

+0

Prawda; zaktualizowałem moją odpowiedź. – ThiefMaster

1

W przypadku atrybutu onclick nie należy używać prefiksu javascript:. Jest to przydatne, gdy chcesz link <a /> obsługiwać funkcję JS, na przykład:

<a href="javascript:myfunc();"></a> 
+2

'javascript:' Adresy URL są złe. Nie tylko zrywają z wyłączonym JavaScriptem, ale także powodują problemy, jeśli funkcja zwraca wartość. Lepiej użyj poprawnego adresu URL w 'href' (lub' # ', jeśli link nie ma funkcji zastępczej innej niż js) i 'onclick', aby uruchomić kod javascript (' return false; '/' preventDefault', aby uniknąć ładowania href łącza) – ThiefMaster

+1

Zgadzam się z tobą. Pytanie dotyczyło prefiksu 'javascript:'. – sp00m

1

javascript:func() używa javascript protocol tak, że może on być stosowany w kotwice href atrybut. Jednak nie rób tego, aby uzyskać więcej informacji, zobacz Why is it bad practice to use links with the javascript: “protocol”?.

Obsługa zdarzeń jest preferowana do uruchamiania zdarzeń zamiast atrybutów.

+0

OP zapytał o 'onclick', nie o' href' – ThiefMaster

+0

W każdym razie dzięki za powiązane pytanie! –

+0

@ ThiefMaster - prawda, ale także pytał o skrypt zaczynający się od 'javascript:'. – detaylor