当我调用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)
答案 0 :(得分:3)
如果document.getElementById
找不到该元素,则会返回null
。如果您尝试从src
获取null
属性,则会收到此错误。
您需要确保其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 %>")
答案 1 :(得分:1)
在这种情况下不知道它是否有用,但这是防止错误的一个技巧:
(document.getElementById("OfficeContent")||{}).src="ChangeView.aspx";
如果元素不存在,则空对象获取src
- 属性,不会抛出任何错误,也不会造成任何伤害。
虽然查找document.getElementById("OfficeContent")
返回null的原因可能是明智的。
答案 2 :(得分:0)
在设置元素的src属性
之前,您需要先测试元素是否存在var el = document.getElementById("OfficeContent");
el && (el.src="ChangeView.aspx");
答案 3 :(得分:0)
所有这些东西都是主要问题的外围,即:
您必须使用“OfficeContent”的实际clientID,它在呈现时可能与页面的HTML DOM完全不同。避免这种情况的一种简单方法就是这样:
var officeContent = document.getElementById(“&lt;%= OfficeContent.ClientID%&gt;”)