2013-02-05 37 views
0

我想用javascript創建表格並填充數據。所以我決定使用prompt方法和循環while使用js創建表的值

但是當我嘗試加載網頁我總是在谷歌Chrome開發者工具 enter image description here

下面是代碼

<html> 
<head> 
    <meta charset="utf-8"> 
    <script type="text/javascript"> 
    function onStart() { 
     var list = new Array(); 
     var headers = new Array("Имя","Отчество","Фамилия","Дата рождения"); 
     var i = -1; 
     while(true) { 
      var a = prompt("Имя","noname"); 
      var b = prompt("Отчество","nomiddlename"); 
      var c = prompt("Фамилия","nosurname"); 
      var d = prompt("Дата рождения!",0); 
      if (confirm("Уверены что хотите добавить студента?")) { 
       i++; 
       list[i] = a + "-" + b + "-" + c + "-" + d; 
      }else{ break; }; 
     } 
     tab = "<table>"; 
     for(j = 0; j<headers.length;j++) { 
      tab += "<th>" + headers[j] + "</th>"; 
     for(var j = 0; j < list.length; j++) { 
      var params = list[i].split('-'); 
      tab += "<tr>"; 
      for(k = 0; k < params.length;k++) { 
       tab +="<td>" + params[k] + "</td>"; 
      } 
      tab +="</tr>"; 
     } 
     tab +="</table>"; 
     document.write(tab); 
    }; 
    </script> 
</head> 
<body onLoad = "onStart()"> 
</body> 

有什麼問題,有兩種錯誤訊息?

回答

3

您的循環似乎是錯誤縮進,而不是正確關閉

for(j = 0; j<headers.length;j++) { 
     tab += "<th>" + headers[j] + "</th>"; 
    for(var j = 0; j < list.length; j++) { 
     var params = list[i].split('-'); 
     tab += "<tr>"; 
     for(k = 0; k < params.length;k++) { 
      tab +="<td>" + params[k] + "</td>"; 
     } 
     tab +="</tr>"; 
    } 

應該

for(j = 0; j<headers.length;j++) { 
    tab += "<th>" + headers[j] + "</th>"; 
} 
for(var j = 0; j < list.length; j++) { 
    var params = list[i].split('-'); 
    tab += "<tr>"; 
    for(k = 0; k < params.length;k++) { 
     tab +="<td>" + params[k] + "</td>"; 
    } 
    tab +="</tr>"; 
} 

不直接關係到你的問題,但你有一些其他常見的JavaScript錯誤。
通過不用var聲明變量,你無意中創建全局變量。雖然這可能不是你的網頁上的一個大問題,但這是不好的做法。

此外,你應該換你<th>標籤要在<tr>內追加,作爲<table>內唯一的「有效」元素是<tr>(技術上其TBODY,THEAD和TFOOT,這是唯一有效的兒童是<tr>)。

+1

我的猜測面前多了一個「}」的是,這應該是兩個獨立的迴路,沒有嵌套的循環。 – aepheus

+0

@aepheus你可能是對的,我會更新答案以反映這一點,而將''加到'

'元素也是不正確的。 –

1

你錯過了你的第一個循環收盤}:

for(j = 0; j<headers.length;j++) { 

    tab += "<th>" + headers[j] + "</th>"; 

}

我會去猜測他是想環路直通頭,其次是列,然後關閉表。不循環直通標題,併爲每個標題添加所有行。而且,肯定不是循環通過標題和每個標題循環遍歷所有行並關閉並寫入表。

0

在你的代碼中onStart(){}方法沒有正確關閉。添加在下面的代碼

</script> 
</head> 
+0

我不認爲這是他沒有關閉的功能,因爲這會在這些循環中產生一些奇怪的行爲。 – aepheus

+0

@aepheus這只是他的快速解決方案。 –

+0

快速解決與否,我確信他希望得到正確的輸出。 – aepheus