2012-04-20 24 views
8

¿Hay alguna diferencia entreonclick = "javascript: func()" frente a onclick = "func()"

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

y

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

¿Debo usar javascript: antes de una llamada a la función JS ?

+4

No, no necesita ... –

+0

en ***** ejecuta javascript sin definir un "javascript:" – Tobi

+0

de cualquier manera, no es una buena práctica usar – Joseph

Respuesta

10

javascript: dentro de un onwhatever="" controlador no es necesario. El contenido de este atributo siempre es JavaScript, por lo que javascript: define label - pero fuera de un bloque switch o un bucle (donde puede usarlo al break/continue en la posición de la etiqueta) no hace nada.

Sin embargo, se desaconseja el uso de controladores de eventos en línea, hay betterways para registrar controladores de eventos.


Aunque no se menciona en la pregunta, vale la pena señalar que el uso de javascript: en el atributo href funciona (y allí es realmente necesario), pero no es nada recomendable por varias razones:

  • this no apunta al elemento
  • Llamar a una función que devuelve un valor hace que el navegador salga del sitio
  • Haciendo clic en el enlace con saltos de JavaScript deshabilitados
  • intentar abrir el enlace en una nueva ventana/pestaña rompe

lo tanto, si usted realmente tiene que utilizar los eventos en línea, utilice siempre onclick="" etc. sin javascript:.

+0

Puedes usarlo también con 'break' y cualquier instrucción. No tiene que ser usado junto con 'switch'. –

+0

Verdadero; actualicé mi respuesta. – ThiefMaster

1

Cuando se encuentre en un atributo onclick, no debe usar el prefijo javascript:. Esto es útil cuando se desea un enlace <a /> manejar una función JS, por ejemplo:

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

'javascript:' Las URL son malas. No solo rompen con JavaScript deshabilitado sino que también causan problemas si la función devuelve un valor. Por lo tanto, es mejor usar una URL adecuada en 'href' (o' # 'si el enlace no tiene un respaldo no js) y' onclick' para ejecutar su código javascript ('return false;'/'preventDefault' para evitar cargar el href del enlace) – ThiefMaster

+1

Estoy de acuerdo con usted. La pregunta era sobre el prefijo 'javascript:'. – sp00m

1

javascript:func() está utilizando el javascript protocol de modo que pudiera utilizar en una anclajes href atributo. Sin embargo, no hagas esto, mira Why is it bad practice to use links with the javascript: “protocol”? para más información.

Los controladores de eventos son preferibles para desencadenar eventos en lugar de atributos.

+0

El OP preguntó sobre 'onclick', no sobre' href' – ThiefMaster

+0

De todos modos, ¡gracias por la pregunta relacionada! –

+0

@ThiefMaster - cierto, pero también preguntaba acerca de la secuencia de comandos que comenzaba con 'javascript:'. – detaylor