2011-08-17 78 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%>」)

相關問題