请考虑以下代码:
CODE :
$(document).on("click", "#add_new_item_ingredient", function() {
$(this).siblings("#ingredients_table").append('<tr><td style="width:20%"> <input type="text" id="option_item_costs_2" class="form-control" placeholder="£2.50"> </td><td style="width:50%"> <input type="text" id="option_item_desc_2" class="form-control" placeholder="Ex. Extra tomato"> <input type="hidden" id="option_item_id_2" value="-1"> </td></tr>');
});
$(document).on("click", "#remove_new_item_ingredient", function() {
$(this).siblings("#ingredients_table tr").each(function(index) {
alert("!");
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-striped notifications" id="ingredients_table">
<tbody>
<tr>..</tr>
<tr>..</tr>
<tr>..</tr>
</tbody>
</table>
<button class="btn_1" id="add_new_item_ingredient">+ Ingredient</button>
<button class="btn_1" style="background:#C70000;" id="remove_new_item_ingredient">- Ingredient</button>
使用第一个按钮添加新行很有效,但是当我尝试从同一个表中删除最后一个tr
元素时,它什么都不做。我现在正在尝试提醒,对于找到的每个tr
元素,但我没有收到警报。我尝试获取总是返回0的表行计数,并尝试使用#ingredients_table >tbody >tr
我可以确认两个点击事件都正确触发,我可以正确选择表格元素,而不是任何一行。
任何建议都将不胜感激。
答案 0 :(得分:2)
这是因为按钮#remove_new_item_ingredient
没有tr
兄弟姐妹。
您先选择表格,然后使用find
获取tr
:
$(this).siblings("#ingredients_table").find("tr").each(function(index) {
或使用:
$("#ingredients_table tr").each(function(index) {
在可更新性方面更好。
正如@ T.J.Crowder所说:
您的表格中有两个tbody
元素(它们都没有关闭,可能是错字)
您要将行追加到table
,而不是tbody
答案 1 :(得分:1)
删除处理程序$.siblings
在与按钮相同的级别上查找tr
元素,但情况并非如此。 tr
位于表格中,即下降2级。因此,只需将您的调用修改为$(this).siblings("#ingredients_table").find('tr')