2011-12-29 87 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

相关问题