我尝试使用jQuery动态创建和删除表行。虽然它的添加行部分正常工作,但删除行并不是因为onclick事件正在附加到动态创建的按钮上。我该如何解决这个问题?
<table border="1" id="applicanttable">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th> </th>
</tr>
</thead>
<tbody>
<tr id="row_0">
<td><input id="firstName0" name="firstName0" type="text" /></td>
<td><input id="lastName0" name="lastName0" type="text" value=""/></td>
<td><input type="button" class="removerow" id="removerow0" name="removerow0" value="Remove"/></td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="5" style="text-align: left;"><button type="button" id="addrow">Add Row</button></td>
</tr>
</tfoot>
</table>
<script type="text/javascript">
var rowIndex = 0;
$("#addrow").on('click', function() {
rowIndex++;
var newRow = '<tr><td><input id="firstName' + rowIndex + '" name="firstName' +
rowIndex + '" type="text" /></td>"' + '<td><input id="lastName' + rowIndex +
'" name="lastName' + rowIndex + '" type="text" /></td>"' +
'<td><input type="button" class="removerow" id="removerow' +
rowIndex + '" name="removerow' + rowIndex + '" value="Remove"/></td>';
$("#applicanttable > tbody > tr:last").after(newRow);
});
$(".removerow").on('click', function() {
alert("hello");
});
</script>
答案 0 :(得分:1)
您必须创建一个&#34; $(document).on('click','.removerow',function(){
//do alert here
});
&#34;使用on()
进行绑定。
$("#applicanttable").on('click','.removerow',function(){
//do alert here
});
或您可以使用非动态父
function removeRow(thisObj){
}
或者您可以创建一个功能
onclick="removeRow(this)"
并放置ssh
答案 1 :(得分:1)
使用jQuery而不是字符串创建元素,您可以立即附加事件处理程序,这是带按钮的示例,其余元素可以以相同的方式创建
final Switch o = (Switch)findViewById(R.id.obamaswitch);
if (o.isChecked()){
o.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
ImageView p = (ImageView)findViewById(R.id.obamahere);
p.???;
}
});
答案 2 :(得分:1)
注意,在</tr>
处遗漏了newRow
。尝试使用选择器click
将document
事件委派给[class^=removerow]
,以选择以class
开头的"removerow"
元素。另请尝试调整#addRow
click
事件以包含if
条件,以检查#applicanttable > tbody > tr
中是否存在DOM
;如果没有将newRow
追加到#applicanttable > tbody
var rowIndex = 0;
$("#addrow").on('click', function() {
rowIndex++;
var newRow = '<tr><td><input id="firstName' + rowIndex + '" name="firstName' + rowIndex + '" type="text" /></td>"' +
'<td><input id="lastName' + rowIndex + '" name="lastName' + rowIndex + '" type="text" /></td>"' +
'<td><input type="button" class="removerow" id="removerow' + rowIndex + '" name="removerow' + rowIndex + '" value="Remove"/></td></tr>';
if ($("#applicanttable > tbody > tr").is("*"))
$("#applicanttable > tbody > tr:last").after(newRow)
else $("#applicanttable > tbody").append(newRow)
});
$(document).on('click', "[class^=removerow]", function() {
$(this).parents("tr").remove();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<table border="1" id="applicanttable">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th> </th>
</tr>
</thead>
<tbody>
<tr id="row_0">
<td>
<input id="firstName0" name="firstName0" type="text" />
</td>
<td>
<input id="lastName0" name="lastName0" type="text" value="" />
</td>
<td>
<input type="button" class="removerow" id="removerow0" name="removerow0" value="Remove" />
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="5" style="text-align: left;">
<button type="button" id="addrow">Add Row</button>
</td>
</tr>
</tfoot>
</table>
答案 3 :(得分:1)
我将选择器.removerow
作为on
事件侦听器的第二个参数,以便它附加到动态元素。
$(document).on('click', '.removerow', function() {
$(this).parents('tr').remove();
});
您可以测试fiddle here