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

alert(element.onclick); 

위 코드가 출력됩니다. function() {alert (1); }addEventListener가 DOM 요소의 onclick 속성에 미치는 영향은 무엇입니까?

그럼 다음 코드 계속 실행 :

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

출력은 여전히 ​​함수이다() {경고 (1); } 사실

이제 요소를 클릭하면 코드 하여 addEventListener (기능 '을 클릭'() {경고 (2);}, false)를; 작품은,이 새로운 기능 경보 (2)이 요소의 온 클릭 속성으로 쓴 것을 의미한다. 그러나 출력이 여전히 변하지 않은 이유는 무엇입니까? 가 온 클릭 속성이 변경 방법 하여 addEventListener을 실행할 때

그래서, 내가 알고 싶은 것은?

답장을 기다리겠습니다.

+0

나는 이것을 위해 바이올린을 만들었 : http://jsfiddle.net/billymoon/9sNqq/ –

+0

또한 - 두 개의 클릭 핸들러가 모두 추가 될 때 두 번째가 아닌 두 번째 핸들러가 실행되기 때문에 이벤트 리스너를 추가해도 이전을 제거하지 못합니다. element.onclick은 첫 번째 클릭 이벤트 함수 만 반환하는 것 같습니다. –

+0

도움이 될 것입니다. https://developer.mozilla.org/en/DOM/element.addEventListener#Notes – jasssonpet

답변

7

OnClick은 DOM 레벨 0 속성입니다. AddEventListener는 DOM 레벨 2 정의의 일부입니다. AddEventListener 메서드를 통해 이벤트 핸들러를 추가해도 요소의 OnClick 속성은 변경되지 않고 요소의 이벤트 리스너 컬렉션에 리스너가 추가됩니다. DOM Level 2 이벤트에 대한 자세한 내용은 http://www.w3.org/TR/DOM-Level-2-Events/events.html에서 확인할 수 있습니다. http://en.wikipedia.org/wiki/DOM_events에도 멋진 기사가 있습니다.

2

"onfoo"속성은 "addEventListener()"를 통해 액세스되는 이벤트 핸들러 관리 시스템과는 독립적입니다. 둘 중 하나만 사용하는 것이 가장 좋으며 두 가지를 동시에 사용하지 않는 것이 가장 좋습니다.보다 유연하고 방해가되지 않는 "addEventListener()"(사용 가능한 경우)가 올바른 선택입니다.

+0

[이 기사] (http://www.quirksmode.org/js/events_order.html)에 따르면, "onfoo"속성은 버블 링 단계에서 등록으로 간주됩니다. – zanetu

관련 문제