javascript中的奇怪行为

时间:2009-05-05 21:07:09

标签: asp.net javascript

我有一张像这样的桌子

<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>

任何人都可以在这个问题上给我一个骨头吗?我被卡住了。

3 个答案:

答案 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');