【发布时间】:2017-07-21 23:24:08
【问题描述】:
我目前正在使用 jQuery 数据表来制作我正在显示的表格。目前我已经设置好了,所以当我在表格中选择一行时,该行中的文本会出现在另一个面板的文本框中。然后我可以输入其他内容并按“保存”,它会更改该行中的文本。我当前的问题是当我通过按钮添加新行时,我无法编辑新行中的文本,但是我可以选择它...... 示例:我有 3 行,我选择 Test1 并且可以成功更改文本。然后我单击添加行,然后选择新行并尝试更改该行中的文本,它会更改先前选择的行的文本(加载时表中的行)。 我该如何解决这个问题?我已经查看了 cell.data、cell.edit,但这是针对编辑器的,由于各种原因我目前没有使用它。
表:
<div class="panel-body">
<table id="data-table" class="table table-striped table-bordered nowrap" width="100%">
<thead>
<tr>
<th>Name</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>All</td>
</tr>
<tr class="even">
<td>Test1</td>
</tr>
<tr class="odd">
<td>Test2</td>
</tr>
</tbody>
</table>
<div class="col-md-8 col-md-offset-1">
<button type="submit" class="btn btn-sm btn-primary m-r-5" id="addbtn" >New Group</button>
</div>
</div>
//Text box
<div class="form-group">
<label class="col-md-4 control-label">Group Name:</label>
<div class="col-md-8">
<input type="text" id="groupname" class="form-control" value="Name"/>
</div>
</div>
使选定行的文本出现在文本框中的代码:
(function () {
var table = document.querySelector('#data-table');
var textbox = document.querySelector('#groupname');
table.addEventListener('click', onTableClick);
function onTableClick (e) {
var tr = e.target.parentElement;
var data = [];
for (var td of tr.children) {
data.push(td.innerHTML);
}
textbox.value = data[0];
}
})();
更改选定行的文本:
var row = null;
$("#data-table tr td").click(function() {
$("#groupname").val($(this).text());
row = $(this);
$("#saverow").click(function() {
if (row != null) {
row.text($("#groupname").val());
}
});
});
添加行:
$("#addbtn").click( function() {
var t = $('#data-table').DataTable();
$('#data-table').dataTable();
t.row.add( [
"New Group"
] ).draw( false );
});
【问题讨论】:
-
我认为您的问题是重复的 ID。 html 文档中可能只有一个 id 实例。它编辑上一行文本的原因是因为您几乎所有内容都按 id 进行选择,而且它只会在页面上找到第一个结果。
-
选中的标签被添加到类标签中。我可以成功更改已编码到 html 中的所有 3 行的文本,但是一旦添加新行,我就无法更改该行的文本。我仍然可以更改所有其他行的文本。
标签: javascript jquery datatable