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