JavaScript getElementById(...)为null或不是对象IE

时间:2010-06-30 08:25:14

标签: javascript internet-explorer getelementbyid

对于那里的JavaScript专家来说,这一定非常简单。在下面的代码中,我试图将iframe打开到浏览器窗口的完整高度。

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
         <script language="javascript" type="text/javascript">
    function resizeIframe() {
    var height = document.documentElement.clientHeight;
    height -= document.getElementById('documentFrame2').offsetTop;
    height -= 20;
    document.getElementById('documentFrame2').style.height = height +"px";
 };
document.getElementById('documentFrame2').onload = resizeIframe;
window.onresize = resizeIframe;
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
     <iframe src="standard-tube-map.pdf" id="documentFrame2" width="100%" onload="resizeIframe();" ></iframe> 
    </div>
    </form>
</body>
</html>

它在Mozilla中工作但在IE中(仅在IE8中测试)它会给出错误:'document.getElementById(...)为null或不是对象'。任何人都可以建议我应该更改什么以使其跨浏览器工作?

非常感谢, 阿里

4 个答案:

答案 0 :(得分:2)

尝试包装

document.getElementById('documentFrame2').onload = resizeIframe;

在:

window.onload = function(){

    document.getElementById('documentFrame2').onload = resizeIframe;
    window.onresize = resizeIframe;
    resizeIframe();
};

在页面/ Dom加载之前,DOM中不存在iframe。

<强>更新

没有看到您发布的部分代码。

您可以将onload = "resizeIframe"保留在元素本身中,并将JavaScript放在头部中:

function resizeIframe() {
    var height = document.documentElement.clientHeight;
    height -= document.getElementById('documentFrame2').offsetTop;
    height -= 20;
    document.getElementById('documentFrame2').style.height = height +"px";
 }


 window.onresize = resizeIframe;

这样你就不需要在元素之后运行任何JavaScript。

答案 1 :(得分:1)

  1. alert(document.getElementById('abcId').value);
    
  2. alert(document.formName.elements['abcName'].value);
    
  3. 我遇到了同样的问题,我尝试了第二个工作。

答案 2 :(得分:0)

你做了

document.getElementById('documentFrame2').onload = resizeIframe;

在文档准备好之前,可以找到iframe。在onload-或document-ready-function中或在iframe之后的单独的javascript-block中调用它。

答案 3 :(得分:0)

如果您在iframe代码中使用了onload"resizeIframe",则不再需要document.getElementById('documentFrame2').onload = resizeIframe;

我更喜欢通过以下方式转发window.onresize = resizeIframe;

window.onload = function() {
  window.onresize = resizeIframe;
};

有时窗口会在iframe准备好运行之前调整大小,这会导致错误。

========================

编辑:

window.onload = function() {
  resizeIframe();
  window.onresize = resizeIframe;
};