2011-12-29 86 views
2

所以,我有一個JavaScript代碼,使一個彈出div。它的工作原理與我預期的完全相同。但後來我試圖在IE瀏覽器上,它不起作用(驚喜!)。我發現(令人震驚的是)IE有一個開發者控制檯,可以使用javascript斷點。所以,我通過我的代碼去了,並且發現了IE在下面的代碼遇到第4行的錯誤:在IE中不支持DOM值屬性?

function makePopUp() { 
    div = document.getElementById("shell"); 
    if(!div) { 
     email = document.getElementById("email").value; //HERE IS THE ERROR! 
     popupshell = document.createElement("div"); 
     popupinner = document.createElement("div"); 
     popupshell.id = "shell"; 
     popupinner.id = "inner"; 
     popupinner.innerHTML = "A crazy long string (HTML of the popup)" 
     popupshell.appendChild(popupinner); 
     document.body.appendChild(popupshell); 
    } 
    else { //This just blinks the popup window if it already exists. 
     blink(div); 
     t = setTimeout("blink(div);",100); 
     t = setTimeout("blink(div);",200); 
     t = setTimeout("blink(div);",300); 
     t = setTimeout("blink(div);",400); 
     t = setTimeout("blink(div);",500); 
    } 
} 

IE給我的錯誤「對象不支持此屬性或方法」。我認爲它指的是輸入標籤的值屬性,我使用id爲「email」。此屬性是DOM 1 & 2 ...所以IE應該能夠解釋它。有沒有人有解決這個問題,或者是我的代碼實際上應該是一個錯誤,我只是愚蠢?

+0

旁註:不要將字符串傳遞給'setTimeout',傳遞函數。 'setTimeout(function(){blink(div);},100);' – 2011-12-29 23:08:45

+0

什麼是'email'?一個div,一個輸入欄,一個textarea? – 2011-12-29 23:09:33

回答

3

問題不在於「value」屬性。問題是你沒有用var聲明你的局部變量。

var email = document.getElementById("email").value; //HERE IS THE ERROR! 

的Internet Explorer對待元件作爲參考相應DOM節點的window性質的「ID」的值。如果沒有var,變量「email」就是全局符號,IE不喜歡你給它分配一個字符串的想法。

+0

我不認爲會拋出一個'對象不支持這個屬性或方法',會嗎?雖然,使用'var'是一個好主意(除非'email'確實是一個全局變量)。 – 2011-12-29 23:11:37

+1

我不知道IE會拋出什麼;它做了一些奇怪的東西。 – Pointy 2011-12-29 23:12:54

+0

http://jsfiddle.net/aKy89/ <=在IE9中工作 – 2011-12-29 23:13:28

相關問題