2011-10-31 55 views
0
window.onload = function(e){ 
    cells = document.getElementsByName('assetID'); 
    for(j = 0; j < cells.length; j++) cells[j].style.display = 'none'; 
    cellsBMPartNo = document.getElementsByName('BMPartNo'); 
    for(j = 0; j < cellsBMPartNo.length; j++) cellsBMPartNo[j].style.display = 'none'; 
    defaultAssetTableValues(); 
} 

我只是通過名稱隱藏表格行。 請參閱第2行和第4行。 它在Firefox中正常工作,但不在IE中。 我錯過了什麼嗎?WIndow.onload()不能在IE上工作來隱藏表格行

+0

對'for'循環的主體不使用大括號可能會導致非常具有誤導性的代碼。也許不是什麼導致你的問題在這裏,但不是一個好的風格。 – jfriend00

+0

此外,不要忘記用'var'關鍵字聲明局部變量(「cells」,「j」,「cellsBMPartNo」)! – Pointy

+0

謝謝你這是一個有用的提示..其實我遵循它,這是一個簡單的複製粘貼我發現的鏈接。謝謝你指出,雖然。 – VBelawa1

回答

1

IE沒有看到元素動態地(通過DOM)與getElementsByName添加到文檔中。你的元素是以這種方式創造的?

在不同版本的IE中,該方法還存在其他問題。作爲解決方法,您可以使用getElementsByTagName('td'),然後檢查name屬性是否與您在for循環中查找的屬性匹配,並遍歷元素數組。

這裏是getElementsByName一個 「IE固定」 版本:

function getElementsByName2(tag, name) { 
    var els = document.getElementsByTagName(tag); 
    var arr = []; 
    for (var i = 0; i < els.length; i++) { 
     if (els[i].getAttribute("name") == name) { 
      arr.push(els[i]); 
     } 
    } 
    return arr; 
} 

而且你會使用它,像這樣(在表格單元格的元素名稱爲 '由assetid'):

var cells = getElementsByName2('td', 'assetID'); 
+0

僅供將來參考(var i = 0; i VBelawa1

+0

將此答案標記爲yes,因爲我無法使用類名,因爲已經使用名稱設置了表。 – VBelawa1

+0

對於可以合法擁有「名稱」屬性的元素,這可能不起作用,例如「」標籤。在通過「.getAttribute()」檢查之前,檢查每個元素的屬性可能會更好。 (但是,這將解決原始帖子的問題,因爲我認爲這正是IE內置的「getElementsByName()」無法解決的問題。) – Pointy

0

IE可能正在尋找一個nameassetID是你的assetID在name屬性中定義的嗎?

爲別人指出的name屬性用於豈不等於TD`s

香港專業教育學院注意到你有未聲明的變量,cells, j, j, cellsBMPartNo也爲j's的一個設置那些i例如一個使其easer到也請按照以下步驟操作

+0

是 – VBelawa1

0

我認爲問題可能是<tr><td>元素實際上不支持「name」屬性。 IE不直接投訴,但其「getElementsByName()」函數不會關注這樣的元素。

您可能想改爲使用「class」值。