在下面的小提琴中,我试图使用DOM添加和删除表行。根据脚本,每行的最后一个字段将有一个删除按钮。但我希望第一个字段中的删除按钮是表格外的添加按钮。
只有第一行的按钮才能添加行按钮。该行的其余部分应该具有删除按钮。我怎样才能做到这一点 ?
jsfiddle - http://jsfiddle.net/7AeDQ/33/
function deleteRow(row)
{
var i=row.parentNode.parentNode.rowIndex;
document.getElementById('POITable').deleteRow(i);
}
function insRow()
{
console.log( 'hi');
var x=document.getElementById('POITable');
var new_row = x.rows[1].cloneNode(true);
var len = x.rows.length;
new_row.cells[0].innerHTML = len;
var inp1 = new_row.cells[1].getElementsByTagName('input')[0];
inp1.id += len;
inp1.value = '';
var inp2 = new_row.cells[2].getElementsByTagName('input')[0];
inp2.id += len;
inp2.value = '';
x.appendChild( new_row );
}
<div id="POItablediv">
<input type="button" id="addmorePOIbutton" value="Add More POIs" onclick="insRow()"/>
<table id="POITable" border="1">
<tr>
<td>POI</td>
<td>Latitude</td>
<td>Longitude</td>
<td>Delete?</td>
</tr>
<tr>
<td>1</td>
<td><input size=25 type="text" id="latbox"/></td>
<td><input size=25 type="text" id="lngbox" readonly=true/></td>
<td><input type="button" id="delPOIbutton" value="Delete" onclick="deleteRow(this)"/></td>
</tr>
</table>
答案 0 :(得分:2)
您可以通过克隆现有行(和现有按钮)来创建新行。如果您希望第一行中按钮的行为与其他行不同,则需要在insRow函数中覆盖该更改的行为(正如您当前对输入ID所做的那样)。
尝试将代码更改为:
HTML:
...
<tr>
<td>1</td>
<td><input size=25 type="text" id="latbox"/></td>
<td><input size=25 type="text" id="lngbox" readonly=true/></td>
<td><input type="button" id="delPOIbutton" value="Add More POIs" onclick="insRow()"/></td>
</tr>
...
JS:
function deleteRow(evt) {
var i = evt.target.parentNode.parentNode.rowIndex;
document.getElementById('POITable').deleteRow(i);
}
function insRow() {
var x = document.getElementById('POITable');
var new_row = x.rows[1].cloneNode(true);
var len = x.rows.length;
new_row.cells[0].innerHTML = len;
var inp1 = new_row.cells[1].getElementsByTagName('input')[0];
inp1.id += len;
inp1.value = '';
var inp2 = new_row.cells[2].getElementsByTagName('input')[0];
inp2.id += len;
inp2.value = '';
var button = new_row.cells[3].getElementsByTagName('input')[0];
button.value = "Delete row";
button.onclick = function(it) {deleteRow(it)};
x.appendChild( new_row );
}
答案 1 :(得分:1)
我猜你的表会动态生成,这就是你遇到问题的原因。
jQuery解决方案,正如您已标记它:
$(function(){
$("#POITable tr").eq(1).find('td:last').html('<input type="button" id="addmorePOIbutton" value="Add More POIs" onclick="insRow()"/>');
});
演示: http://jsfiddle.net/7AeDQ/59/
此外,您的删除按钮会多次显示,因此您不必使用固定的id
:
<input type="button" id="delPOIbutton" value="Delete" onclick="deleteRow(this)"/>
而是使用class
或使用增量ID,例如id="delPOIbutton-1"
,id="delPOIbutton-2"