簡體   English   中英

javascript中的奇怪行為

[英]Odd behavior in 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設置Display風格的事實有關,無論出於什么原因,即使我將它的顯示設置為“inline”,DOM也無法找到trRow1。

任何人都可以在這一個上給我一個骨頭嗎? 我被卡住了。

對象trDegree沒有定義,你的命名約定看起來像trDegree我是一個表行元素,我認為你正在嘗試做這樣的事情:

function WTF() {       
  var trDegree = document.getElementById('trDegree'); // Locate the element
  var obj = trDegree.getElementsByTagName("select");
  alert(obj.length);
}

進一步參考:

我沒有在您的示例中看到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);
}

解決方案是第一個答案。 在使用它添加此行之前,U必須獲取該元素:

var trRow1 = document.getElementById('trRow1');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM