2012-04-09 19 views
11

En otras palabras, ¿cuál es la diferencia entre¿Qué hace realmente el pseudo protocolo de JavaScript?

onclick="myFunction()" 

y

onclick="JavaScript:myFunction()" 
+2

Whoa, pasó mucho tiempo desde la última vez que usé el atributo 'onclick'. El JavaScript no intrusivo le permite vincular eventos en elementos en javascript y es mucho más composable. – Spoike

+1

... y comienza la locura de capitalización de JavaScript (TM). –

Respuesta

9

El JavaScript: TIPO/ETIQUETA/prefijo (no se pudo encontrar el nombre real de ella) en el controlador de eventos sirve un propósito solamente:

En IE, IFF el primer script en la página es NO JavaScript, JavaScript en línea en el resto de la página tenía (¿todavía tiene?) Tener javascript: prefiándolo.

No debe confundirse con el javascript:protocolo en el href (que por cierto también debe evitarse). href="javascript:..." solo se necesita en paisajes de redes antiguos en la etiqueta AREA. Cuando veas el href="javascript:void(0)", alguien debe usar onclick="....; return false" en su lugar, a menos que lo pongan allí para alertar al usuario de que el enlace es uno impulsado por JavaScript. Fallará si JS está apagado.

Busqué la documentación oficial de MSDN, pero aquí hay discusiones para apoyarme:

Calling VBScript from Javascript

valores por defecto de Internet Explorer a la lengua del primer elemento de script se analiza. Entonces, si el primer elemento de script es javascript, no debe especificar "javascript:" en su controlador de eventos.

http://www.webdeveloper.com/forum/archive/index.php/t-135462.html

Tienes que decirle IE está utilizando VBS y JScript, de lo contrario el supuesto es todas las funciones son VBS en este caso. Agregue un elemento de script JavaScript (¿vacío?) [En la parte superior de la página] o utilice el protocolo jscript: en el onchange. onchange = "jscript: location.hash = this [this.selectedIndex].valor;"

Ejemplo

<html> 
<head> 
<script language="VBScript"> 
' some vbscript here forces the default language 
' of the page to be VBScript and not jScript/JavaScript 
</script> 
</head> 
<body onload="javascript:alert('I am inline in an event handler - boo me')"> 
. 
. 
<a href="..." onclick="javascript:alert('and so am I'); return false">Click</a> 
. 
<a href="javascript:alert('javascript: PROTOCOL is NOT the same (but avoid it too)')"> 
    Click 
</a> 


</body> 
</html> 
+0

¡Guau, no estaba al tanto de esta rareza en IE! Me alegro de no haberlo encontrado nunca. – ephemient

2

Como @ephemient menciona en su comentario, javascript en onclick no hace nada, es básicamente una etiqueta inútil. El prefijo javascript se usa en la etiqueta <a> para indicarle al navegador que ejecute lo siguiente como javascript, como si hubiera ingresado lo mismo en su navegador. Puede probarlo en la barra de direcciones de su propio navegador y ver, simplemente ingrese javascript: alert("Hello").

En resumen:

En onclick: el navegador espera que esto sea el javascript, por lo que si se introduce javascript: como prefijo el navegador va a decir: 'Oh, cómo pintoresca, se pone una etiqueta'.

En <a href o en la barra de direcciones del navegador: el navegador no espera que esto sea el javascript, por lo que si se introduce javascript: como prefijo el navegador va a decir: 'Oh, tengo que ejecutar esto como javascript'.

+0

. "como si hubiera ingresado lo mismo en su navegador", no estoy de acuerdo. El JavaScript PREFIX/LABEL se convierte mágicamente en un PROTOCOLO si lo pegas en el navegador, pero eso es puramente un efecto secundario y no tiene nada que ver con el clic – mplungjan

+0

Eso es exactamente lo que estoy diciendo, actualicé la respuesta para intentar dejarlo más claro porque obviamente no he hecho un buen trabajo con eso. –

Cuestiones relacionadas