ASP.NET:为什么我的JavaScript对象设置为null?

时间:2010-04-29 17:52:48

标签: asp.net javascript null getelementbyid

我有<script>包含这一行:

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

上执行的

3 个答案:

答案 0 :(得分: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>

当您的页面首次加载时,这将显示“null”。但是,如果您再次添加按钮来调用此方法,则会看到tbl已填充。

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

答案 1 :(得分:1)

尼克是对的。该表尚未解析/构建。 尝试将getElementById代码移至document.ready事件。 顺便说一下,JQuery提供了很好的文档事件包装等等。

以下是代码段:

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

答案 2 :(得分:1)

MrGumbe和Valera对你Jav​​ascript的时机是正确的。但我已经看到这种情况发生了另一个原因。我们有服务器端逻辑设置tblSelection.Visible = false的实例,这意味着它甚至没有发送到浏览器。像你这样的客户端代码会运行寻找ID和爆炸。