0

我有一个<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

4

3 回答 3

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();" />
于 2010-04-29T18:01:04.867 回答
1

尼克是正确的。该表尚未解析/构造。尝试将getElementById代码移动到document.ready事件。顺便说一句,jQuery 为文档事件等提供了一个很好的包装器。

这是代码片段:

$(document).ready(function() {
    $get('table-id').doManipulation();
});
于 2010-04-29T18:04:18.063 回答
1

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

于 2010-04-29T18:10:16.340 回答