2011-03-27 10 views
5
element.onclick = function() { alert(1); } 

alert(element.onclick); 

El código anterior salida función() {alert (1); }cómo addEventListener influye en la propiedad onclick del elemento DOM?

Luego continuar ejecutando el siguiente código:

element.addEventListener('click', function() { alert(2); }, false); 
alert(element.onclick); 

La salida sigue siendo función() {alert (1); }

De hecho cuando se hace clic en el elemento de ahora, el código addEventListener ('click', function() {alert (2);}, false); obras, significa que la nueva función alerta (2) ha escrito en el onclick propiedad de este elemento . Pero, ¿por qué la producción sigue sin cambios?

Por lo tanto, lo que yo quiero saber es cuando se ejecuta addEventListener, cómo el onclick propiedad cambió?

Estamos ansiosos por su respuesta.

+0

Hice un violín para esto: http://jsfiddle.net/billymoon/9sNqq/ –

+0

Además, cuando se agregan ambos manejadores de clics, se ejecutan ambos, no solo el segundo, por lo que la adición del detector de eventos no elimina el previo. Parece que element.onclick solo está devolviendo la primera función de evento de clic. –

+0

Eso lo ayudará: https://developer.mozilla.org/en/DOM/element.addEventListener#Notes – jasssonpet

Respuesta

7

OnClick es una propiedad DOM Nivel 0. AddEventListener es parte de la definición DOM Nivel 2. Agregar un controlador de eventos mediante el método AddEventListener no cambia la propiedad OnClick en el elemento, sino que agrega el detector a una colección de detectores de eventos en el elemento. Puede encontrar más información sobre los eventos de Nivel 2 de DOM en http://www.w3.org/TR/DOM-Level-2-Events/events.html. También hay un buen artículo al http://en.wikipedia.org/wiki/DOM_events.

2

Los atributos "onfoo" son independientes del sistema de gestión del controlador de eventos al que se accede a través de "addEventListener()". Lo mejor es usar uno u otro, no ambos, y la elección correcta es el más flexible y poco intrusivo "addEventListener()" (donde esté disponible).

+0

Según [este artículo] (http://www.quirksmode.org/js/events_order.html), Los atributos "onfoo" se ven como registros en la fase de burbujeo. – zanetu

Cuestiones relacionadas