2012-04-20 19 views
8

C'è qualche differenza traonclick = "javascript: func()" vs. onclick = "func()"

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

e

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

Dovrei usare javascript: prima di una chiamata di funzione JS ?

+4

No non è necessario .. –

+0

su ***** esegue javascript senza definirli un "javascript:" – Tobi

+0

in entrambi i casi, non è consigliabile utilizzare in linea – Joseph

risposta

10

javascript: all'interno di un gestore di onwhatever="" non è operativo. Il contenuto di questo attributo è sempre JavaScript, quindi javascript: definisce un label - ma al di fuori di un blocco switch o un ciclo (dove è possibile utilizzarlo per break/continue nella posizione dell'etichetta) non fa nulla.

Tuttavia, l'utilizzo di gestori eventi in linea è sconsigliato, ci sono betterways per registrare gestori di eventi.


Mentre non menzionato nella domanda, è opportuno notare che utilizzando javascript: nell'attributo href funziona (e non è effettivamente necessario) ma è sconsigliato per vari motivi:

  • this non punta all'elemento
  • Chiamare una funzione che restituisce un valore fa sì che il browser lasci il sito
  • Fare clic sul collegamento con interruzioni JavaScript disabilitate
  • Cercando di aprire il link in una nuova finestra/scheda rompe

Quindi, se si hanno veramente a utilizzare gli eventi in linea, usare sempre onclick="" ecc, senza javascript:.

+0

Puoi usarlo anche con 'break' e qualsiasi istruzione. Non deve essere usato insieme a 'switch'. –

+0

Vero; aggiornato la mia risposta. – ThiefMaster

1

Quando si utilizza un attributo onclick, non utilizzare il prefisso javascript:. Questo è utile quando si desidera un collegamento <a /> per gestire una funzione JS, ad esempio:

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

'javascript:' Gli URL non sono corretti. Non solo si rompono con JavaScript disabilitato ma causano anche problemi se la funzione restituisce un valore. Quindi meglio usare un URL appropriato in 'href' (o' #' se il link non ha un fallback non js) e 'onclick' per eseguire il codice javascript (' return false; '/' preventDefault' per evitare di caricare href del link) – ThiefMaster

+1

Sono d'accordo con te. La domanda riguardava il prefisso 'javascript:'. – sp00m

1

javascript:func() sta usando il javascript protocol in modo che potesse essere utilizzato in un ancore href attributo. Tuttavia, non farlo vedere Why is it bad practice to use links with the javascript: “protocol”? per ulteriori informazioni.

I gestori di eventi sono preferibili per attivare eventi anziché attributi.

+0

L'OP ha chiesto di 'onclick', non di' href' – ThiefMaster

+0

Comunque grazie della relativa domanda! –

+0

@ThiefMaster - true ma stava anche chiedendo informazioni sullo script che inizia con 'javascript:'. – detaylor