Sé que esta es una mala práctica. No escriba código como este si es posible.
Por supuesto, siempre nos encontraremos en situaciones en las que un fragmento inteligente de Javascript en línea puede solucionar un problema rápidamente.
Estoy siguiendo esta consulta con el interés de comprender completamente lo que sucede (y las posibles dificultades) cuando se escribe algo como esto:
<a href="#" onclick="alert('Hi')">Click Me</a>
Por lo que puedo decir, esto es funcionalmente el mismo que
<script type="text/javascript">
$(function(){ // I use jQuery in this example
document.getElementById('click_me').onclick =
function () { alert('Hi'); };
});
</script>
<a href="#" id="click_me">Click Me</a>
Extrapolando de esto, parece que la cadena asignada al atributo onclickse inserta dentro de una función anónima que se asigna al controlador de clic del elemento. ¿Es este realmente el caso?
Porque estoy empezando a hacer cosas como esta:
<a href="#" onclick="$(this).next().fadeIn(); return false;">Display my next sibling</a> <!-- Return false in handler so as not to scroll to top of page! -->
Que funciona Pero no sé cuánto de esto es un hack. ¡Parece sospechoso porque no hay una función aparente de la que se está devolviendo!
Puedes preguntar, ¿por qué haces esto, Steve? ¡Inline JS es una mala práctica!
Bueno, para ser honesto, estoy cansado de editar tres secciones diferentes de código solo para modificar una sección de una página, especialmente cuando estoy creando prototipos de algo para ver si funciona. Es mucho más fácil y, a veces, incluso tiene sentido que el código específicamente relacionado con este elemento HTML se defina directamente dentro del elemento: cuando decido 2 minutos más tarde que esta fue una idea terrible, terrible, puedo bombardear todo el div (o lo que sea ) y no tengo un montón de misterioso JS y CSS cruft en el resto de la página, lo que ralentiza el renderizado muy ligeramente. Esto es similar al concepto de localidad de referencia, pero en lugar de errores de caché, estamos viendo errores e hinchazón de código.
#click_meen el evento DOMready o colocar el script después del nodo.
document.getElementById("click_me").onclick;. O alertarlo. Verás que está en una función.