【问题标题】:Delete Row, Save Changes once I edit table using Javascript使用 Javascript 编辑表格后删除行,保存更改
【发布时间】:2017-10-17 12:25:20
【问题描述】:

有人发布了这个:
Making row editable when hit row edit button

我想创建一个删除/编辑/保存按钮,以便人们可以输入订单号并删除或编辑数据。

测序步骤: 删除时: 点击删除按钮,弹出提示框,输入1,删除1。 我点击删除按钮,弹出提示框,我输入2,不删除2

但是: 点击删除按钮,弹出提示框,输入2,删除2。 我点击删除按钮,出现提示框,我输入1,不删除1

编辑按钮有效,但是当我点击保存按钮时,它不会保存更改

https://jsfiddle.net/nhgjdr00/8/

HTML:

<table id="myTable" border="1">
<thead>
<th>Order #</th>
<th>Name</th>
<th>Tea Order</th>
<th>Tea Size</th>
</thead>

<tbody>
<tr>
<td class="rowNumber">1</td>
<td>Shakespeare</td>
<td>Iced</td>
<td>Small</td>
</tr>
<tr>
<td class="rowNumber">2</td>
<td>Frost</td>
<td>Hot</td>
<td>Medium</td>
</tr>
</tbody>
</table>
<br>
<input id="deleteRowBtn" type="button" value="Delete Row" />
<input id="editBtn" type="button" value="edt" />
<input id="saveBtn" type="button" value="saveChange" />
<br>
<br>   
<form name="create"2 style="width:80px;">
Name:<input type="text" id="txtname" />
<br>
Tea Order:<input type="text" id="txtTeaOrder" name="txtTeaOrder" />
<br>
Tea Size<input type="text" id="txtTeaSize" name="txtTeaSize" />
<br>
</form>
</body>

JS:

"use strict";
var orderNumberHolder=[]; // holds each order number

// returns a html element (id)
var $ = function(id) {
return document.getElementById(id);
};

function deleteRow() {
var orderNumber = parseInt(prompt ("enter order number to delete")); 
if (orderNumber == NaN || orderNumber < 1) {
prompt ("enter order number");
} else {
var table = $("myTable");
var rowCount = table.rows.length; // eliminate header so minus 1
for(var i=0, j=0; i<rowCount; i++, j++) { 
var row = table.rows[i];
if (orderNumber == i) { 
table.deleteRow(i);
rowCount--;
table.rows[j].cells[0].innerHTML = j; // renumbers the list after delete row
}  
}
}
}

function edt() {
// converts number into integer
var orderNumber = parseInt(prompt ("enter order number to edit")); 

// need to store order number so I can reference when I save edit info
orderNumberHolder.push(orderNumber); 
if (orderNumber == NaN || orderNumber < 1) {
prompt ("enter order number");
} else {
var table = $("myTable");
var rowCount = table.rows.length;

// i is index, so start with 1 so it doesn't include header
for(var i=1; i<rowCount; i++) {
var row = table.rows[i]; 
if (orderNumber == i){
$("txtname").value = table.rows[i].cells["1"].innerHTML;
$("txtTeaOrder").value = table.rows[i].cells["2"].innerHTML;
$("txtTeaSize").value = table.rows[i].cells["3"].innerHTML;
}
}
}
}

function saveChange() {
var table = $("myTable");
var rowCount = table.rows.length; // do not want to include header 

for(var i=1; i<rowCount; i++) {
var row = table.rows[i];
if (orderNumberHolder[i] == i){
table.rows[i].cells["1"].innerHTML =  $("txtname").value ;
table.rows[i].cells["2"].innerHTML = $("txtauthor").value;
table.rows[i].cells["3"].innerHTML =  $("txtcdate").value;
$("txtname").value = '';
$("txtauthor").value = '';                      
$("txtcdate").value = '' ;
rowCount--;
}
}
}

window.onload = function() {
$("deleteRowBtn").onclick = deleteRow; // calls function
$("editBtn").onclick = edt; // calls function
$("saveBtn").onclick = saveChange; // calls function
}

如果有任何建议,我将不胜感激。

【问题讨论】:

    标签: javascript for-loop html-table


    【解决方案1】:

    您正在获取行号并删除该行。当您删除第一行时,现有元素的行号即(订单#2)从2更改为1。因此,当您在提示符中输入2时,没有要删除的行。

    【讨论】:

    • 谢谢维平。我重新编辑了我的代码并更新了我的 jsfiddle。我添加了一个重新编号的功能。但是,我似乎无法重新编号订单号。如果我删除订单 1,它不会将 2 重新编号为 1。我找到了有关如何重新编号的 jQuery 示例。但是我不熟悉 jQuery,我正在尝试通过 Javascript 来做。我将不胜感激花生画廊的任何建议。
    • 我想出了如何在删除行后获取删除按钮并重新编号列表。唯一剩下的是保存按钮不起作用。我将不胜感激任何建议。我更新了上面的更改和 jsfiddle。
    • 我注意到即使它有效,我也会收到此错误:Uncaught TypeError: cannot read property 'cells' of undefined at HTMLInputElement.deleteRow
    • 您好,我会检查一次并回复您
    • 1.是的,您会收到该错误,因为当您删除最后一个元素时没有剩余行并且您尝试将单元格的值设置为 1。检查更新的 plunker:jsfiddle.net/nhgjdr00/11 在这里,我将代码包含在 if 条件中。 2.它不是局部变量。我已经在编辑功能之外声明了它,如果你觉得它有用,请接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2017-02-06
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多