2013-02-17 2 views
0

내부에 사용이 내 자바 스크립트 코드자바 스크립트 : 변수 외부 기능을 초기화 기능

var helper = document.getElementById("helper"); 

helper.style.position = "relative"; 
helper.style.width = "50px"; 
helper.style.height = "50px"; 
helper.style.border = "1px solid #000"; 

function move() { 
    helper.style.left = event.offsetX + "px"; 
    helper.style.top = event.offsetY + "px"; 
} 

내 HTML 코드

<div id="grid" onmousemove="move()" onmousedown="down()"> 
    <div id="helper"></div> 
</div> 

입니다하지만 호출 할 때 그 기능 아무 일도 일어나지 않습니다. 나는 양방향 세계 및 모든 것에 변수 도우미 그래서 기능이 helper 변수에 대한 액세스 권한을 가지고

+0

[jQuery 또는 \ getElementById \와 같은 DOM 메소드가 요소를 찾을 수없는 이유는 무엇입니까?] (http://stackoverflow.com/questions/14028959/why-does-jquery-or-a-) dom-method-such-getelementbyid-not-find-the-element) – Bergi

답변

4

귀하의 move 함수를 호출 할 때 다시 한번 모든 것을 초기화 할 필요가 없습니다 초기화 사전 있다고합니다. 내 생각에 표시된 코드는 script 요소 위, 위, 페이지의 helper 요소이므로 var helper = document.getElementById("helper"); 행이 실행될 때 요소가 아직 존재하지 않습니다.

또한 move 처리기는 IE 관련 동작 (전체 event 개체)에 의존합니다. 이 동작은 다른 브라우저에서도 호환성을 위해 제공되지만 모든 사람이 제공하는 것은 아닙니다. 지금처럼 dom0이 핸들러를

function move(event) { 
    // ... 
} 

... 그리고 업데이트 : : 좀 더 광범위하게 호환 인수로 event을 수락하려면 범위 때문에 작동

<div id="grid" onmousemove="move(event)" onmousedown="down(event)"> 

을하는에 onXYZ의 코드 처리기는 전역 번호가없는 경우에도 항상 event 기호가 있습니다.

또는 물론 addEventListener (이전 IE 버전에서는 attachEvent)을 사용하십시오.

+0

또 하나의 질문입니다. 이걸보세요 http://jsfiddle.net/KkqX2/ 왜 항상 "다시로드"하고 마우스를 움직이면 마우스가 뒤 따르지만 다시 시작하여 작은 div를 왼쪽 상단에 표시합니다. – FosAvance

관련 문제