모질라, 넷스케이프는 이유를 밝혀라!

Mozilla Firefox 사용에 대한 일반적인 질문과 답을 해 주는 게시판입니다. 질문을 하기 전에 FAQ를 읽어 보시는게 도움이 될 것입니다.
댓글 게시
가루

모질라, 넷스케이프는 이유를 밝혀라!

게시물 작성자 가루 » 2004 10 09 22:45 54

왜 도대체 img 태그에서 x()라는 펑션을 실행시킬수 없게 하는 것인가?

아래 소스를 보면 div태그는 x()가 불려지지만 img태그는 x()가 불려지지 않는다.

익스에서는 둘다 되지만 넷스와 모질라에서는 안된다.

<script>
function x(){
alert(1);
}
</script>

<div onclick="x()">눌러봐</div>
<img src="암거나" onclick="x()">

난 이 이유를 찾기 위해서 몇시간동안 각종 사이트를 다 뒤지며 조사했지만
밝혀낼 수 없었다. 그래서 나는 img태그에 onclick이벤트가 안먹는줄 알았다.
하지만 원인은 너무나 허무했다.

함수명x()는 안먹지만 xx(), xa(), 기타 아무거나 로 바꿀경우 아주 잘된다.
처음부터 div태그도 x()가 안되게 하던지 왜 다른 태그들에서는 x()가 되는데
img태그만 x()가 안되게 만든것인가?
이유가 있는가? 이유를 밝혀라. 내 몇시간동안의 삽질을 보상하라. ㅠ0ㅠ

kheled
게시물: 4
참여됨: 2003 11 06 07:05 31

게시물 작성자 kheled » 2004 10 10 12:12 23

scope 충돌 문제로 보이네요. DOM inspector로 IMG 노드의 Javascript Object 항목을 보면, IMG 노드에는 DOM에 의해 정의된 x라는 속성이 있는데, 예에 쓰신 onclick 핸들러에서 전역에 걸쳐 정의된 x() 함수를 부르지 않고 IMG 자체의 x 속성을 참조하는 듯합니다.

이와 같이 중복된 이름의 경우 가장 가까운 노드부터 찾기 시작할 터이니, onclick 핸들러의 경우에는 this인 IMG 노드 자체부터 찾기 시작하겠죠.

충돌을 없애려면 window.x()를 호출하시면 될 듯합니다.

가루

글쿤요.

게시물 작성자 가루 » 2004 10 10 20:34 35

감사합니다.

댓글 게시

누군가 접속

유저들이 이 포럼을 탐색중: 가입된 유저 없음 그리고 2 손님들