2011-09-09 3 views
3

Chrome/Firefox에서 사용자 정의 속성을 하나의 핸들러에있는 이벤트 객체에 첨부 할 수 있으며 이벤트 처리가 위로 올라가더라도 동일한 이벤트에 대해 다른 핸들러에서 읽을 수 있습니다.자바 스크립트에서 버블 링 된 이벤트 객체에 속성 추가하기

IE에서 동일한 작업을 수행 할 수 없습니다. 이벤트가 버블 링되는 동안 내 사용자 정의 속성이 손실됩니다. 해결 방법이나 해결 방법이 있는지 알고 계십니까? 내 테스트 당신이 (IE8 테스트) IE에서 이벤트 객체에 속성을 추가 할 수에 따라

<div id="div1"> 
<input type="button" value="Foo" id="button1"> 
</div> 

<script> 

function attach(el, event, fn) { 
    if (el.addEventListener) { 
    el.addEventListener(event, fn); 
    } else if (el.attachEvent) { 
    el.attachEvent('on'+event, fn); 
    } 

} 

attach(document.getElementById("button1"), 'click', function (event) { 
event.abc = "done"; 
return true; 
}); 

attach(document.getElementById("div1"), 'click', function (event) { 
alert(event.abc); 
return true; 
}); 

</script> 
+1

당신은 IE의'event' 객체에 접근조차하지 않습니다. IE는 이벤트 핸들러로 전달하지 않고, 단지'window.event'를 통해 사용할 수 있습니다. 이것을 먼저 시도하십시오. –

+0

@Felix 나는 window.event를 시도했지만 아무 소용이 없습니다. 이벤트 객체가 이벤트 핸들러로 전달된다고 확신합니다. – mgamer

+1

IE9 이전의 IE에는 없습니다. –

답변

0

:

다음은 그 문제의 예입니다.

attach(document.getElementById("button1"), 'click', function (ev) { 
    //ev=ev||event; 
    //ev.abc = "done"; 
    // next lines show you why you cannot save properties in event object 
    var xx1=event; 
    var xx2=event; 
    alert(xx1===xx2); // // showed *false* in IE8, but expected *true* 

    return true; 
}); 

나는 확실하지 않다하지만 event 객체가 요청 될 때, 아마, IE8은 항상 새로운 객체를 반환 이전 요청과 동일한 속성/값을 포함합니다 :

다음 코드를 사용해보십시오.

관련 문제