0

我想使用 javascript 创建表并用数据填充它。所以我决定使用prompt方法和循环while

但是当我尝试加载页面时,我总是在谷歌浏览器开发者工具中收到两条错误消息 在此处输入图像描述

这是代码

<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>

有什么问题?

4

3 回答 3

3

您的 for 循环似乎缩进错误且未正确关闭

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>要附加的标签包装在 a<tr>中,因为 a 中唯一的“有效”元素<table>是 a <tr>(从技术上讲,它的 tbody、thead 和 tfoot,其中唯一有效的子元素是<tr>)。

于 2013-02-05T17:13:36.350 回答
1

您在第一个循环中缺少结束 }:

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

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

}

我猜他正试图循环通过标题,然后是列,然后关闭表格。不循环通过标题,并为每个标题添加所有行。而且,当然不会循环通过标题,并且对于每个标题循环遍历所有行并关闭并写入表。

于 2013-02-05T17:17:48.640 回答
0

在您的代码中 onStart(){} 方法未正确关闭。在下面的代码前多加一个“ } ”

</script>
</head> 
于 2013-02-05T17:18:16.690 回答