2011-06-29 86 views
8

我有一個JavaScript問題。該代碼在Opera和Firefox瀏覽器中運行,但不在Internet Explorer 8中運行。有人知道爲什麼嗎?JavaScript - 無效參數IE8

function createbtn(object, inner) { 
    var hover = document.createElement("div"); 
    hover.setAttribute("class", "myarea"); 
    if (inner) { 
     hover.style.width = object.width - 16 + "px"; 
     hover.style.height = object.height - 16 + "px"; 
     hover.style.top = getposy(object) + "px"; 
     hover.style.left = getposx(object) + "px"; 
    } else { 
     hover.style.width = object.width + "px"; 
     hover.style.height = object.height + "px"; 
     hover.style.top = getposy(object) - 8 + "px"; 
     hover.style.left = getposx(object) - 8 + "px"; 
    } 
} 

我剛剛在學習Javascript。任何反饋歡迎。 Simon

+0

什麼是getposx和getposy? – Neal

+0

你可以把你的完整代碼放在http://jsfiddle.net演示中嗎? – Neal

+0

如果您使用開發人員工具(F12),您可以檢查IE 8處於什麼渲染模式。您可以發佈它是什麼嗎?我懷疑它是在怪癖模式。 – 2011-06-29 20:20:10

回答

2

我想它與hover.setAttribute("class", "myarea");有關。如果IE 8運行在IE 7或更低版​​本模式下,這將不起作用。那麼你必須使用hover.className = 'myarea'(由所有瀏覽器支持)。

sAttrName參數需要所需內容屬性的名稱,而不是 文檔對象模型(DOM)屬性。例如,在IE8模式下,此方法在設置,獲取或刪除CLASS屬性時不再需要sAttrName爲「className」。早期版本的Internet Explorer和Internet Explorer 8在兼容模式下仍然需要sAttrName來指定相應的DOM屬性名稱。

http://msdn.microsoft.com/en-us/library/ms536739%28v=vs.85%29.aspx

檢查IE的運行模式。

+0

Ack,打我吧。 – 2011-06-29 20:32:18

9

如果object.width小於16

hover.style.width = object.width - 16 + "px"; 

,那麼這將產生具有位於前部的負號,這是非法的,因爲寬度必須爲非負的字符串。

您可以通過說出

hover.style.width = Math.max(object.width - 16, 0) + "px"; 

,同樣的高度解決這一問題。

許多瀏覽器忽略無效內容,但IE在某些模式下更嚴格,所以您可能只是在其他語言中發生沉默失敗。

+0

我使用IE8瀏覽器模式**標準**。我修正了負面的寬度/高度問題,但位置設置不起作用。代碼在這裏:http://jsfiddle.net/AT825/它有什麼問題?感謝迄今爲止所有的好評。 – Simon

+0

你確定'getposy'和'getposx'沒有返回NaN嗎? –

+0

我不確定。對於'hover.style.top = getposy(object)+「px'」; IE8調試器只告訴一個_Invalid Argument_ – Simon