2010-04-29 77 views
0

我有一個<script>包含此行:ASP.NET:爲什麼我的JavaScript對象設置爲null?

var tbl = document.getElementById("<%= this.tblSelection.ClientID %>"); 

...但tbl最終總是被設置爲null

表聲明如下:

<asp:Table ID="tblSelection" runat="server" CellPadding="2" CellSpacing="0" 
    cols="1" style="position: absolute; top: 0%; right: 0%"> 

無論是腳本和表是在同一個母版頁的文件。

這可能是什麼原因造成的?

編輯:我應該指出,這個腳本是在onload

+0

腳本在你的表之前或之後的頁面中? – 2010-04-29 17:57:19

+0

腳本在頭部,表在身體。頭先到。 – Giffyguy 2010-04-29 18:00:07

回答

3

執行我猜你的JavaScript代碼執行前,您的瀏覽器有機會完全呈現表。此時,頁面的DOM將不會完整,並且getElementByID函數將無法找到該表,因爲它尚不存在!

做這個實驗:

<head runat="server"> 
<title></title> 

<script language="javascript"> 

    function showTable() { 

     var tbl = document.getElementById("<%= this.tblSelection.ClientID %>"); 

     alert(tbl); 
    } 

    showTable(); 

</script> 

這將顯示 「空」 當你第一次加載頁面。但是,如果再添​​加一個按鈕來調用此方法,則會看到tbl被填充。

<input type="button" value="CheckTable" onclick="showTable();" /> 
+0

嗯,好的。你知道如何在onload事件處理程序中訪問DOM,還是有其他選擇嗎? – Giffyguy 2010-04-29 18:03:14

+0

當然。頁面正文的OnLoad事件處理程序在正文呈現後觸發,因此該對象可用。嘗試: 另一個選項幾乎沒有優雅,就是在頁面主體之後放置Javascript塊。 – cortijon 2010-04-29 18:39:37

1

尼克是正確的。該表尚未被分析/構建。 嘗試將getElementById代碼移至document.ready事件。 順便說一句,JQuery提供了很好的包裝文件事件和更多。

下面是代碼片段:

$(document).ready(function() 
{ 
    $get('table-id').doManipulation(); 
}); 
+0

document.ready似乎也不起作用。仍爲空。 – Giffyguy 2010-04-29 18:16:16

+0

MrGumbe解決方案有幫助嗎?如果是這樣,可能你的表格被放置在更新面板中,或者是在文檔就緒之後加載的東西。 順便說一句,你安裝了JQuery嗎? $(document).ready是一個JQuery擴展。 – 2010-04-29 18:34:24

1

MrGumbe和瓦雷拉是對你的JavaScript時機。但我已經看到這是因爲另一個原因。我們有服務器端邏輯設置tblSelection.Visible = false的實例,這意味着它甚至不會被髮送到瀏覽器。像你這樣的客戶端代碼運行查找ID和爆炸。

相關問題