【问题标题】:javascript error: Microsoft JScript runtime error: 'document.getElementById(...)' is null or not an objectjavascript 错误:Microsoft JScript 运行时错误:'document.getElementById(...)' 为空或不是对象
【发布时间】:2011-10-29 01:27:32
【问题描述】:

当我调用一个 javascript 函数来显示一个模态窗口时,我收到了这个错误:

Microsoft JScript 运行时错误:'document.getElementById(...)' 为 null 或不是对象

代码块是:

else if (action=="officeview") {
    document.getElementById("OfficeContent").src="ChangeView.aspx";
    ShowFeatureModal('AppView','OfficeContent')

对象是这种情况,确实存在。

错误发生在:document.getElementById 行。 还有什么可能导致错误?

更新:
Index.aspx 正在调用位于 sysUtilities.js 文件中的 javascript 函数。源文件还是一个单独的页面(ChangeView.aspx)

【问题讨论】:

  • document.getElementById 如果未找到该元素,则返回null,并且不允许访问null 中的.src。您在哪里使用此代码?
  • 如果您查看页面的源代码(在浏览器中),您能找到带有id="OfficeContent" 的HTML 元素吗?
  • @DigitalPlane 不确定“我在哪里使用此代码”是什么意思 它正在客户端使用,以调用模式窗口。用户点击一个超链接,这个代码块被调用。
  • @M4N... ChangeView.aspx 页面未加载...。当我点击超链接时,什么也没有发生(除了 javascript 崩溃对话框)

标签: javascript asp.net vb.net


【解决方案1】:

如果document.getElementById 没有找到该元素,它将返回null。如果您随后尝试从null 获取src 属性,您将收到此错误。

您要么需要确保有一个 ID 等于 OfficeContent 的元素,要么执行以下操作:

else if (action=="officeview") {
    var officeContent = document.getElementById("OfficeContent")
    if (officeContent) {
        officeContent.src="ChangeView.aspx";
        ShowFeatureModal('AppView','OfficeContent')
    }
}

编辑:如果您使用的是 ASP.NET(看起来就是这样),请记住,如果您的 ID 在容器控件中,它们可能会被名称损坏。在这种情况下,您必须确保使用ClientID,而不是普通的旧ID。像这样的:

document.getElementById("<%= OfficeContent.ClientID %>")

【讨论】:

  • 好的,所以根据您的代码,我的应用程序无法访问 officecontent.src=""ChangeView.aspx";唯一的问题是 ChangeView.aspx 中确实存在一个名为 OfficeConent 的 div跨度>
  • 出现此错误的可能性最大。 OfficeConent 与代码中的 id 不同,即 OfficeContent。也许这是错字?
  • 不...这是我在这个板上的错字;实际代码中没有错字;
  • 如果你通过脚本调试器运行它,你会看到什么?
  • 它只是说“需要对象”
【解决方案2】:

在设置元素的 src 属性之前,需要先测试一个元素是否存在

var el = document.getElementById("OfficeContent");
el && (el.src="ChangeView.aspx");

【讨论】:

  • 这会导致错误,因为您尝试分配给无效的左值。
  • 如果 OfficeContent 不存在,document.getElementById("OfficeContent") 将返回 null。
  • 可以,但您不能在el &amp;&amp; el.src="ChangeView.aspx"; 中分配给el &amp;&amp; el.src;。这会导致错误 - 在控制台中尝试。
  • 这是无效的。运行此代码将导致Reference Error: Invalid left-hand assignment.
  • el && (el.src = "ChangeView.aspx") 是正确的,不好意思输入错误
【解决方案3】:

不知道在这种情况下是否会有所帮助,但这是防止错误的技巧:

(document.getElementById("OfficeContent")||{}).src="ChangeView.aspx";

如果元素不存在,则空对象获取src-property,不会抛出错误,不会造成任何伤害。

寻找document.getElementById("OfficeContent")返回null的原因可能是明智的。

【讨论】:

    【解决方案4】:

    所有这些都是主要问题的外围,即:

    您必须使用“OfficeContent”的实际客户端ID,它在呈现时在页面的HTML DOM 中可能完全不同。避免这种情况的一种简单方法如下所示:

    var officeContent = document.getElementById("")

    【讨论】:

      猜你喜欢
      • 2013-01-11
      • 2011-02-24
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多