2013-02-17 105 views
0

用這是我的javascript代碼的Javascript:初始化變量之外的功能和內部功能

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> 

但是當我調用該函數沒有任何反應。我想該變量幫手BI全球和一切預初始化,所以我不必從頭再來初始化一切,當函數被調用

+0

[爲什麼jQuery或DOM方法(例如\'getElementById \'找不到元素?])(http://stackoverflow.com/questions/14028959/why-does-jquery-or-a- dom-method-such-as-getelementbyid-not-find-the-element) – Bergi 2013-02-17 12:49:16

回答

4

move功能確實有機會獲得helper變量。我的猜測是,您所展示的代碼位於頁面上的script元素以上helper元素中,因此當您的var helper = document.getElementById("helper");行運行時,元素尚不存在。

另請注意,您的move處理程序依賴於特定於IE的行爲(全球event對象)。雖然這種行爲也是爲了兼容性而由其他一些瀏覽器提供的,但它並不是全部提供的。爲了使它更廣泛的兼容性,接受event作爲參數:

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

...並更新DOM0處理程序,如下所示:

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

做是因爲範圍中,在onXYZ代碼處理程序被稱爲始終有一個event符號,即使沒有全局符號。

或者,當然,在舊的IE版本上使用addEventListenerattachEvent)。

+0

還有一個問題。看這個http://jsfiddle.net/KkqX2/ 爲什麼它總是「重新加載」,當我移動我的鼠標它遵循它,但它有點重啓,並顯示在左上角的小div – FosAvance 2013-02-17 14:51:29