[英]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.