jquery克隆按钮动作不起作用

时间:2012-11-19 11:22:51

标签: javascript jquery web2py

我有一个带有添加/删除按钮的表,这些按钮添加和删除表中的行,按钮也添加了每个新行

这里有我的html

<table>
<tr>
   <th>catalogue</th>
   <th>date</th>
   <th>add</th>
   <th>remove</th>
</tr>
<- target row ->
<tr id="cat_row">
   <td>something</td>
   <td>something</td>
   <td><input id="Add" type="button" value="Add" /></td>
   <td><input id="Remove" type="button" value="Remove" /></td>
</tr>
</- target row ->
</table>

JavaScript:

$("#Add").click(function() {
         $('#cat_row').after('<- target row with ->'); // this is only a notation to prevent repeatation
         id++;
});

$("#Remove").click(function() {
         $('#cat_'+id+'_row').remove();
         id--;
});

请注意,每次添加新行后,id也会更改,例如此处点击“添加”按钮 1次

<table>
<tr>
   <th>catalogue</th>
   <th>date</th>
   <th>add</th>
   <th>remove</th>
</tr>
<tr id="cat_row">
   <td>something</td>
   <td>something</td>
   <td><input id="Add" type="button" value="Add" /></td>
   <td><input id="Remove" type="button" value="Remove" /></td>
</tr>
<tr id="cat_1_row">
   <td>something</td>
   <td>something</td>
   <td><input id="Add" type="button" value="Add" /></td>
   <td><input id="Remove" type="button" value="Remove" /></td>
</tr>
</table>

现在新添加的按钮没有任何操作我必须始终点击原始按钮 - 添加/删除

在此之后我想要删除按钮删除 ONLY 单击它的行 例如,如果我单击第2行中的按钮,则第2行将被删除


的信息: 我使用带有python 2.7的web2py 2.2.1和最后一个版本的jQuery

2 个答案:

答案 0 :(得分:3)

您不能拥有两个具有相同id的按钮(您对“添加”和“删除”都使用重复项)。 id values must be unique on the page

您可能会考虑使用类,并查看事件委派。例如,假设这是您页面上的 only 表(如果没有,只需使选择器更具体),如果您将按钮更改为“add-btn”和“remove-btn”类而不是id值,那么您可以使用delegate

$("table").delegate(".add-btn", "click", function() {
    // An add button was pressed, you can find out which
    // row like this:
    var row = $(this).closest('tr');
});

...同样适用于.remove-btn按钮。

或者,有些人更喜欢使用on(注意参数的顺序略有不同):

$("table").on("click", ".add-btn", function() {
    // An add button was pressed, you can find out which
    // row like this:
    var row = $(this).closest('tr');
});

您使用的是目前风格问题。为了清楚起见,我更喜欢delegate,但jQuery团队喜欢超负荷功能。到目前为止,他们还没有弃用delegate,尽管他们称之为“取代”。

答案 1 :(得分:3)

我认为它会更好而不是:

$('#cat_'+id+_row').remove();

在onclick事件中执行此操作:

$(this).parent().parent().remove();