2011-08-17 77 views
3

当我调用JavaScript函数来显示一个模式窗口我收到此错误:的JavaScript错误:Microsoft JScript运行时错误:“的document.getElementById(...)”为空或不是对象

Microsoft JScript runtime error: 'document.getElementById(...)' is null or not an object

代码块为:

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

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

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

更新:
Index.aspx的呼吁,位于sysUtilities.js文件中的JavaScript函数。源文件还没有单独页面(ChangeView.aspx)

+1

'document.getElementById'返回'null'如果元素未找到,并且不允许访问'nul​​l'的'.src'。你在哪里使用这段代码? –

+0

如果你看看你的页面的源代码(在浏览器中),你能找到一个id为“OfficeContent”的HTML元素吗? – M4N

+0

@DigitalPlane不确定您的意思是“我在哪里使用此代码”它被用于客户端,调用模态窗口。用户单击一个超链接,并调用该代码块。 – DotNetRookie

回答

3

如果document.getElementById找不到该元素,它将返回null。如果您然后尝试从null获得src财产,则会发生此错误。

你要么需要确保有一个与它到OfficeContent ID相同的元素或做类似如下:

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 %>") 
+0

好吧,所以根据你的代码,我的应用程序没有得到to officecontent.src =“”ChangeView.aspx“;唯一的问题是在ChangeView.aspx – DotNetRookie

+0

确实存在一个名为OfficeConent的div有这个错误,这是最可能的办法'OfficeConent'不同于你的代码中的id, 'OfficeContent'。也许这是错字? – FishBasketGordo

+0

nope ...这是我在这个板子上输入的错误;在实际代码中没有输入错误; – DotNetRookie

0

你需要测试的元素是否设置元素的src属性

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

这会导致错误,因为您试图将其分配给无效的左值。 –

+0

如果OfficeContent不存在,document.getElementById(“OfficeContent”)将返回null。 – wukong

+0

是的,但是你不能在'el && el.src =“ChangeView.aspx”;'中分配'el && el.src;'。这会导致错误 - 请在控制台中尝试。 –

1

不知道它会在这种情况下帮助之前,首先存在的,但是这是一个把戏,以防止错误:

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

如果元素不存在,一个空的对象得到src - 属性,不会引发错误,没有坏处 已经完成了。

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

0

所有这些东西是外围的主要问题,这就是:

您必须使用“OfficeContent”,这可能是因为它呈现在页面的HTML DOM完全不同的实际clientID的。一个简单的方法来避免这将是这个样子:

VAR officeContent =的document.getElementById( “<%= OfficeContent.ClientID%>”)

相关问题