我有一个包含以下格式的表的页面:
<table id="gigsTable">
<tr><th>Date</th><th>Time</th><th>Location</th><th>Remove</th></tr>
<tr class="gigRow">
<td><input name="date" type="text" value="Date goes here"></td>
<td><input name="time" type="text" value="Time goes here"></td>
<td><input name="location" type="text" value="Location goes here"></td>
<td class="remove"><input name="remove" type="checkbox" /></td>
</tr>
当单击remove列中的复选框时,其父行淡出然后使用以下jQuery删除:
$("#gigsTable tr .remove input").click(function() {
$(this).parent().parent().fadeOut(500, function() {
$(this).remove();
rowCount--;
});
});
我还有一个按钮,点击时会在表格中添加一行:
$('#addGig').click(function() {
$('#gigsTable tr:last').after('<ROW FORMAT FROM HTML>');
rowCount++;
});
这一切都正常但是当我尝试删除使用上述方法插入的行时没有任何反应。为什么呢?
答案 0 :(得分:0)
click
事件处理程序只能访问最初加载页面时存在的元素。要控制动态添加的元素,请使用on
或delegate
。
此外,您可以使用parent().parent()
closest('tr')
试试这个:
$("#gigsTable tr .remove").delegate('input', 'click', function() {
$(this).closest('tr').fadeOut(500, function() {
$(this).remove();
rowCount--;
});
});
或者如果您使用的是jQuery 1.7+,请使用on
。
$("#gigsTable tr .remove").on('click', 'input', function() {
$(this).closest('tr').fadeOut(500, function() {
$(this).remove();
rowCount--;
});
});
答案 1 :(得分:0)
使用on()
代替直接事件click()
。
当您插入行时,它将自动订阅所有新创建的控件。
答案 2 :(得分:0)
您添加的行尚未绑定到click
事件,您需要on
或live
之类的内容,具体取决于您的jQuery版本。
答案 3 :(得分:0)
原因是您在页面加载时设置了yur remove函数,并且不包含新元素。因此,尝试使用Jquery的live
函数,它也会将click事件绑定到您的新元素。
$("#gigsTable tr .remove input").live("click",function() {
$(this).parent().parent().fadeOut(500, function() {
$(this).remove();
rowCount--;
});
});