2013-01-17 5 views
1

저는 브라우저 간 이벤트 처리를위한 간단한 이벤트 유틸리티를 함께 제공했지만, 상당히 뛰어 넘을 수없는 장애물을 발견했습니다. 그것은 IE9의 srcElement 속성에 관한 것이고, 단지 나를 위해 작동하지 않습니다! 다음 테스트 스크립트는 아래에 크롬과 파이어 폭스에서 잘 작동하여, 이제srcElement가 IE9에서 작동하지 않습니다.

var bonsallNS = new Object(); 

bonsallNS.events = { 
addEvent: function (node, type, func) { 
    if (typeof attachEvent != "undefined") { 
     node.attachEvent("on" + type, func); 
    } else { 

     node.addEventListener(type, func, false); 
    } 
}, 
removeEvent: function (node, type, func) { 
    if (typeof detachEvent != "undefined") { 
     node.detachEvent("on" + type, func); 
    } else { 

     node.removeEventListener(type, func, false); 
    } 
}, 
target: function (e) { 
    if (typeof srcElement != "undefined") { 
     return window.event.srcElement; 
    } else { 
     return e.target; 
    } 
}, 
preventD: function (e) { 
    if (typeof srcElement != "undefined") { 
     window.event.returnValue = false; 
    } else { 
     e.preventDefault(); 
    } 
} 
} 

하지만 수하는 evtTarget를 반환

현재, 내 유틸리티는 다음과 같이합니다 (srcElement가 3 코드 블록) 보이는 IE에서 정의되지 않은 경고를하려고 할 때. 나는 왜 그런 생각이 없기 때문에 어떤 도움이라도 대단히 감사 할 것입니다! 아래 코드를 참조하십시오 :

내가 말했듯이, 다른 모든 것은 IE의 이벤트 소스를 제외하고 작동합니다!

+0

IE 버전을? 이벤트 모델은 IE <= 8에서 다르므로이 정보는 매우 중요합니다. –

+1

'(typeof srcElement! = "undefined") {'be ''if (typeof e.srcElement === "undefined") {'? –

+0

또는 typeof window.event.srcElement! == "undefined"'- 작동합니다, 감사합니다! 모범생 오류입니다. – FunnyOxymoron

답변

1

변수 srcElement은 더 높은 범위에서 정의되지 않는 한 항상 undefined입니다. 그러나 절대로 event.srcElement을 참조하지 않습니다.

는 두 가지 방법으로이 문제를 해결할 수 있습니다 : 어느 여부 e 또는 e.srcElement가 정의되지 않거나 window.eventwindow.event.srcElement 여부가 정의 확인.

if (typeof e === "undefined" || typeof e.srcElement === "undefined") { 
// or 
if (typeof window.event !== "undefined" && 
    typeof window.event.srcElement !== "undefined") { 

당신은 또한에 전체 기능을 단축 할 수 있습니다

target: function (e) { 
    e = e || window.event; 
    return e.target || e.srcElement; 
} 
관련 문제