我正在尝试将包含.closest & .remove
的按钮添加到.append
中,但只有现有按钮才有效。我希望能够单击“新行”按钮并使用新行.append,然后还可以“删除”添加的任何行,但只能添加该行中的行。
按钮
<button id="addLine">New Line</button>
单击将新表添加到
<div id="orderForm">
这是添加的内容
$('#orderForm').append('<table class="orderLine" width="90%" border="0" cellspacing="0" cellpadding="0"><tr><td><input name="field1" type="text" id="field1" size="25" tabindex="1"></td><td><button id="removeLine">remove()</button></td></tr></table>');
很好并且正常工作。我还添加了
$("#removeLine").click(function () {
$('#removeLine').closest('.orderLine').remove();
});
但它仅适用于现有的第一行。
这是完整的代码。
<html>
<head>
<?php include '../_includes/jq.inc.php';?><br>
</head>
<body>
<button id="removeAll">Delete All</button>
<button id="addLine">New Line</button>
<div id="orderForm">
<table class="orderLine" width="90%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input name="field1" type="text" id="field1" size="25" tabindex="1"></td>
<td><button id="removeLine">remove()</button></td>
</tr>
</table>
</div>
</body>
<script type="text/javascript">
$("#removeLine").click(function () {
$('#removeLine').closest('.orderLine').remove();
});
<!-- This removes all newLine table rows -->
$("#removeAll").click(function () {
$('.orderLine').remove();
});
<!-- ADDS the 'newLine' table rows -->
$("#addLine").click(function () {
$('#orderForm').append('<table class="orderLine" width="90%" border="0" cellspacing="0" cellpadding="0"><tr><td><input name="field1" type="text" id="field1" size="25" tabindex="1"></td><td><button id="removeLine">remove()</button></td></tr></table>');
});
</script>
</html>
我已经检查过并检查了一下,我不知道我做错了什么。有没有人对此有任何想法?
答案 0 :(得分:3)
没有两个元素可以使用相同的id
- 使用类和event delegation:
HTML:
<button class="removeLine">remove()</button>
JS:
$("#orderForm").delegate(".removeLine", "click", function () {
$(this).closest('.orderLine').remove();
});
委派允许您监听由尚未添加到文档的元素触发的事件。在这种情况下,它会附加一个处理程序到orderForm
,用于侦听在.removeLine
元素上触发的点击事件,这些元素当前存在或将来会添加。
答案 1 :(得分:1)
答案 2 :(得分:0)
你应该看一下jQuery.live而不是jQuery.click。 jQuery.click只会绑定一次(在你的情况下只有初始删除按钮),而jQuery.live也会绑定与选择器匹配的新元素。另外我认为最好为你的删除按钮使用一个类,因为你有一个删除按钮,所以一个id是无效的HTML。您只能拥有一个具有相同ID的DOM元素。但是你可以拥有更多同一类的DOM元素。
$('.removeButton').live('click' function() {
$(this).closest('.orderLine').remove();
});