Un par de razones. Es esencialmente un alias de la interfaz DOM Nivel 1 de element.onclick
, que solo permite un detector de eventos.
Otra razón es que simplemente es filosóficamente erróneo. Conduce a un código mal organizado: estás mezclando un lenguaje declarativo con un lenguaje funcional que incorpora grandes cantidades de lógica en su ejecución.
La forma correcta sería:
element.addEventListener('click', function() {
console.log('hello world');
}, false); // required for old gecko
O en IE:
element.attachEvent('onclick', function() {
console.log('hello world');
});
o en el muy menos, utilizar el modelo DOM nivel 1:
element.onclick = function() {
console.log('hello world');
};
(También tenga en cuenta que alert
es una mala práctica, bloqueará la ejecución del página del neumático)
Otra razón sería que no tiene acceso a ningún tipo de objeto de evento que normalmente obtendría como primer argumento de la devolución de llamada del oyente. (Estás esencialmente dentro de una devolución de llamada cuando configuras los atributos de [evento], por lo que no estoy seguro si puedes hacer argumentos [0] o cómo los diferentes motores de renderización lo implementan. Es muy incómodo, por lo que es mejor vincular eventos en JS-land.)
La razón final que se me ocurre es la compatibilidad con varios navegadores. No puedes normalizar una interfaz de evento para ti si estás vinculando eventos en HTML.
quirksmode.org los llama * * controladores de eventos en línea. Eche un vistazo a estos artículos y brinde una introducción muy completa a los manejadores de eventos: http://www.quirksmode.org/js/introevents.html. –