我有一张像这样的桌子
<table>
<tr id="trRow1" runat="server" style="display: none">
<td>First Name:</td>
<td><asp:Label id="lblFirstName" runat="server"></asp:Label></td>
</tr>
<tr>
<td>Last Name:</td>
<td><asp:Label id="lblLastName" runat="server"></asp:Label></td>
</tr>
</table>
如您所见,最初没有显示第一行。当用户单击页面上的某个单选按钮时,会发生异步回发,此时我将trRow1的样式设置为“inline”。没有什么花哨;没什么新鲜的。它的效果非常好。
或者至少在我尝试在javascript函数中执行以下操作之前。
function Test() {
var obj = trRow1.getElementsByTagName("select");
alert(obj.length);
}
在我调用Test()时,我收到一条错误消息“Microsoft JScript运行时错误:'trRow1'未定义。”
我的猜测是,这与我使用AJAX设置显示样式的事实有关,无论出于何种原因,即使我将它的显示设置为“内联”,DOM也找不到trRow1。 / p>
任何人都可以在这个问题上给我一个骨头吗?我被卡住了。
答案 0 :(得分:3)
对象 trDegree 未定义,您的命名约定看起来像 trDegree i sa表行元素,我认为您正在尝试执行以下操作:
function WTF() {
var trDegree = document.getElementById('trDegree'); // Locate the element
var obj = trDegree.getElementsByTagName("select");
alert(obj.length);
}
进一步参考:
答案 1 :(得分:1)
我没有在您的示例中看到trDegree的任何变量。在调用getElementsByTagName之前,您需要加载trDegree。
例如:
function WTF() {
var trDegree = document.getElementById('trDegree');
var obj = trDegree.getElementsByTagName("select");
alert(obj.length);
}
或者您可以从文档级别加载标记。我不确定这是否是你想要的效果。
function WTF() {
var obj = document.getElementsByTagName("select");
alert(obj.length);
}
答案 2 :(得分:0)
解决方案是第一个答案。在使用它之前,U必须先获取该元素:
var trRow1 = document.getElementById('trRow1');