JavaScript逻辑错误

问题描述 投票:0回答:2

我试图让JavaScript为我生成一个包含数组数据的表,但是当我运行此代码时,它会输入两次相同的数据。有谁知道我犯的是什么错误?

HTML:

<body>
<div class="container">
    <h1 class="page-header">Bookings</h1>
    <table id="bookTable" class="table table-bordered">
        <thead>
            <tr>
            <th>First Name</th>
            <th>Second Name</th>
            <th>Email</th>
            <th>From</th>
            <th>To</th>
        </tr>
        <tr>
            <td type="text" id="firstName"></td>
            <td type="text" id="secondName"></td>
            <td type="text" id="email"></td>
            <td type="text"id="dateFrom"></td>
            <td type="text"id="dateTo"></td>
        </tr>
    </thead>
  </table>
</div>

JavaScript正在使用我发现我已经改编的指南。实际上,数组来自python文件,当Flask显示模板时,该文件作为变量输入。在查看传递的变量的内容时,我使用了python打印出来的相同数据。

<script>
    var listOfBookings = [John`Doe`[email protected]`03/01/2018`18/01/2018`John`Doe`[email protected]`26/12/2017`27/12/2017]
    var array = listOfBookings.split("`");
    var count = 1
    for (var i = 0; i < array.length; i++){
        if (1%(i+1) == 0){
            var firstName = array[i];
            }
        if (2%(i+1) == 0){
            var secondName = array[i];
            }
        if (3%(i+1) == 0){
            var email = array[i];
            }
        if (4%(i+1) == 0){
            var dateFrom = array[i];
            }
        if (5%(i+1) == 0){
            var dateTo = array[i];
            }



        // Addapted from http://talkerscode.com/webtricks/add-edit-and-
delete-rows-from-table-dynamically-using-javascript.php
        if(count%5 == 0){
            var table=document.getElementById("bookTable");
            var table_len=(table.rows.length)-1;
            var row = table.insertRow(table_len).outerHTML="<tr 
id='row"+table_len+"'><td id='date_row"+table_len+"'>"+firstName+"</td><td 
id='name_row"+table_len+"'>"+secondName+"</td><td 
id='country_row"+table_len+"'>"+email+"</td><td 
id='country_row"+table_len+"'>"+dateFrom+"</td><td 
id='country_row"+table_len+"'>"+dateTo+"</td></tr>";
        }
        count += 1
    }
</script>
javascript html-table
2个回答
0
投票

你的代码看起来过于复杂。这是一个如何实现它的工作示例:(注意:我在表中添加了一个tbody,而不是将所有这些行插入到thead中)

var listOfBookings = "John`Doe`[email protected]`03/01/2018`18/01/2018`John`Doe`[email protected]`26/12/2017`27/12/2017";
var array = listOfBookings.split("`");
var count = 1;
var table = document.getElementById("bookTable").getElementsByTagName('tbody')[0];
var row = table.insertRow(-1); //appends initial row  
row.id = "row_" + (count)
for (var i = 0; i < array.length; i++) {
  if (i % 5 == 0 && i > 0) {
    row = table.insertRow(-1); //appends a row
    row.id = "row_" + (++count)
  }
  var cell = row.insertCell(-1); //appends a cell
  var text = document.createTextNode(array[i]); //create the textNode
  cell.appendChild(text); //fill the cell with the text
  //(you could also set the cell id and other attributes at this point too)
}
<div class="container">
  <h1 class="page-header">Bookings</h1>
  <table id="bookTable" class="table table-bordered">
    <thead>
      <tr>
        <th>First Name</th>
        <th>Second Name</th>
        <th>Email</th>
        <th>From</th>
        <th>To</th>
      </tr>
    </thead>
    <tbody>
    </tbody>
  </table>
</div>

0
投票

你的数组似乎有10值,并且从你所有的if语句中,当true大于i时,它们的条件都不会等于4

所有变量(firstNamesecondNameemaildataFromdateTo)将具有相同的值,当count10时,就像它们是5时一样

你可以这样做:

    
var array = ["John","Doe","[email protected]","03/01/2018","18/01/2018","John","Doe","[email protected]","26/12/2017","27/12/2017"];
var table=document.getElementById("bookTable");
            
for (var i = 0; array.length % 5 === 0 && i < array.length;){
     var firstName = array[i++];
     var secondName = array[i++];
     var email = array[i++];
     var dateFrom = array[i++];
     var dateTo = array[i++];
     var table_len = (table.rows.length)-1;
     var row = table.insertRow(table_len).outerHTML="<tr id='row"+table_len+"'><td id='date_row"+table_len+"'>"+firstName+"</td><td id='name_row"+table_len+"'>"+secondName+"</td><td id='country_row"+table_len+"'>"+email+"</td><td id='country_row"+table_len+"'>"+dateFrom+"</td><td id='country_row"+table_len+"'>"+dateTo+"</td></tr>";
    }
<body>
<div class="container">
    <h1 class="page-header">Bookings</h1>
    <table id="bookTable" class="table table-bordered">
        <thead>
            <tr>
            <th>First Name</th>
            <th>Second Name</th>
            <th>Email</th>
            <th>From</th>
            <th>To</th>
        </tr>
        <tr>
            <td type="text" id="firstName"></td>
            <td type="text" id="secondName"></td>
            <td type="text" id="email"></td>
            <td type="text"id="dateFrom"></td>
            <td type="text"id="dateTo"></td>
        </tr>
    </thead>
  </table>
</div>
© www.soinside.com 2019 - 2024. All rights reserved.