2008-11-17 74 views
-1

執行順序的問題之前,我問我的問題,這裏是有問題的代碼:的Javascript道場

var coords = dojo.coords(g); 
g.style.left = coords.x + "px"; 
g.style.top = coords.y + "px"; 
g.style.position = "absolute"; 

現在想象g是70的x位置的相對定位的元素和爲30。y位置。如果我註釋掉了上面代碼的最後一行,這就是dojo.coords(g)給我的。但只要我添加最後一行,dojo.coords(g)返回一個位置爲x的位置,這是元素在絕對位置時的位置。在我看來,dojo.coords()的呼叫不應該受到它下面的代碼的影響,但它是。

我也看到了與dojo.require()相同的問題,如果我直接調用它的函數調用之前調用它加載,我得到該給定函數的未定義錯誤。

我在Firefox 3中測試,但我也注意到Safari 3中的類似問題。任何想法?

回答

0

我還是會愛一個人來解釋爲什麼這個作品,但這裏有一個解決方案:

var coords = dojo.coords(g); 
g.style.left = coords.x + "px"; 
g.style.top = coords.y + "px"; 
setTimeout(function(h) { 
    h.style.position = "absolute"; 
}, 0, g); 

乾杯

-1

遺憾地沒有迴應你的問題,(因爲我不知道道場),但除非coords.x和coords.y返回一個字符串,還有在你的函數錯誤,

g.style。 left = coords.x +「px」;

g.style.top = coords.y +「px」;

你需要始終是一個字符串傳遞給風格,所以添加這些也:

g.style.left = parseInt(coords.x) + "px"; 
g.style.top = parseInt(coords.y) + "px"; 

你會驚訝這種錯誤的多少倍了我的頭紡紗。關於答案,對不起,但我幫不了你。

祝你好運!

編輯:

哦,如果我的理解,我可以幫你現在..好了,因爲我不知道道場,我可以向你指出一個JavaScript類似,將你想要做什麼。

g.offsetTop 

g.offsetLeft 

會給你從元素的位置的COORDS。嘗試一下,看看它是否工作..

+0

?那麼甚至可以嘗試幫助。 – 2008-11-17 14:55:32

1

這不是道場怪癖,但雙向瀏覽器的工作。基本上,DOM可能需要一些時間來反映您的更改和重新定位元素,甚至更改佈局。這就是爲什麼你看到你所看到的。

另一個原因可能是您的元素的父項。 dojo.coords()返回相對於視口的位置。如果您傳遞「true」作爲第二個值,它將返回相對於文檔根目錄的位置。直接指定頂部/左側並將位置更改爲「絕對」會使元素與父元素相對定位(如果元素的位置也是絕對的,相對的或固定的)或文檔根目錄。這是一個微妙的差異,但有時會咬人。相關參考文獻:Containing Block,MSDN: position Attribute,Google doctype: position

PS:我個人靠道場設置左/頂部希望它會做正確的事周圍的瀏覽器怪癖工作,和我第一次設置的位置:我贏了下一次」

var coords = dojo.coords(g); 
g.style.position = "absolute"; 
dojo.marginBox(g, {l: coords.x, t: coords.y});