2009-09-16 49 views
1

我想根據用戶的選擇顯示行。假設他只想要3行,那麼第四行和第五行就會隱藏起來。請在下面找到html和javascript的部分。試圖隱藏表格行時發生JavaScript錯誤

HTML

<table> 
    <tr id="sRow1"> 
    <td>1a</td> 
    <td>1b</td> 
    </tr> 
    <tr id="sRow2"> 
    <td>2a</td> 
    <td>2b</td> 
    </tr> 
    <tr id="sRow3"> 
    <td>3a</td> 
    <td>3b</td> 
    </tr> 
    <tr id="sRow4"> 
    <td>4a</td> 
    <td>4b</td> 
    </tr> 
    <tr id="sRow5"> 
    <td>5a</td> 
    <td>5b</td> 
    </tr> 
</table> 

的JavaScript

// b gets value from xml file   
    while (b <= 5) 
    { 
     var rowName = "sRow" + b; 
     alert(rowName); 
     try { 
      document.getElementById(rowName).style.display = "none"; 
     } 
     catch (err) 
     { 
      alert(err.description) 
     } 
     b++; 
    } 

我得到所需的對象錯誤在的document.getElementById(rowName).style.display = 「無」;你能幫忙嗎?

+2

我不明白你爲什麼需要在這裏試試。你確定'document.getElementById(rowName)'實際上找到元素嗎?如果沒有,它應該返回'null'並且進一步的屬性訪問 - 即'.style.display' - 應該導致錯誤。爲了防止這種情況,只需在嘗試設置其樣式之前檢查元素的存在。 – kangax 2009-09-16 23:23:09

+0

適用於例如。 'B = 4'。也許'b'不是你所期望的?在錯誤發生之前您會收到警報的rowName是什麼? – bobince 2009-09-16 23:32:04

+0

另一個奇怪的觀察,如果我將sRow中的id名稱更改爲sib,它的工作原理。 sRow是某種關鍵字。問候 – kobra 2009-09-16 23:42:18

回答

1

你錯過了有趣的位(其中b來自),所以我會只是猜測:有時b其實不是1和5(含)之間的數字。也許這是一個字符串,不會乾淨地將其格式化爲1-5位數字,或者也可能完全是其他字符......讓我們讓您的代碼更安全一些,以防萬一我是對的:

// b gets value from xml file 

// ensure b is a number - will fail comparison if NaN 
b = new Number(b); 
while (b <= 5) 
{ 
    var rowName = "sRow" + b; 
    var row = document.getElementById(rowName); 
    if (row) // verify element was found before trying to modify it! 
    row.style.display = "none"; 
    b++; 
} 

請注意,我已經刪除了try {} catch - 你最好只是測試的getElementById()的返回值,因爲這不會干擾調試你應該想以後使用調試器......

+0

謝謝。警報(rowName)顯示正確的ID。所以b的價值不是問題。問候 – kobra 2009-09-16 23:24:56

+0

@ kobra:你確定*?在'alert()'對話框中顯示的字符串末尾顯示空格是非常困難的... – 2009-09-16 23:26:14

+0

@Vagabond - 將聲明放在try {}中解決了問題,這使得它成爲範圍問題。 – karim79 2009-09-16 23:27:57

1

在我經驗,您將在不同的瀏覽器中獲得不一致的結果,試圖通過修改樣式屬性來使錶行不可見。更安全的做法是使用表對象上的insertRow()deleteRow() dom方法實際刪除並插入表中的行。這可以在您可能遇到的所有主流瀏覽器中得到適當支持。

+0

謝謝。你能指出一些例子嗎?我覺得這種方式很有趣。問候。 – kobra 2009-09-16 23:39:25

+0

當然。我的答案中有方法名稱鏈接中的代碼示例。往上看。 :) – Asaph 2009-09-16 23:45:21

+0

謝謝。對不起,忽略。問候 – kobra 2009-09-16 23:46:15

0

我想你錯過了行id的runat屬性,正如你所提到的行的id,但沒有提到runat屬性,如果你沒有提到runat屬性,那麼錯誤來了。

+0

它是一個簡單的HTML網頁與JavaScript。所以runat服務器或客戶端的問題不會出現。問候 – kobra 2009-09-17 01:19:38