我有如下的html:
<table class="table" id="subscriptions">
<tbody id="subscriptions-tbody">
<tr>
<td>Item 1</td>
<td><a href="#">delete</a></td>
</tr>
<tr>
<td>Item 2</td>
<td><a href="#">delete</a></td>
</tr>
<tr>
<td>Item 3</td>
<td><a href="#">delete</a></td>
</tr>
</tbody>
</table>
可以在那里动态添加项目。
现在,我应该创建该函数,这将帮助我从列表中删除元素,如果用户单击删除。 看起来我应该:
href
?; 怎么做?
答案 0 :(得分:4)
这是事件委派的完美案例。将事件挂钩到table
或tbody
,但要求jQuery仅在删除链接上发生时触发它,如下所示:
$("#subscriptions-tbody").delegate("a", "click", function(event) {
var row = $(this).closest('tr');
// ...delete the row
return false; // Don't try to follow the link
});
由于事件隐藏在table
或tbody
上,因此添加和删除行无关紧要,因为事件是在table
或tbody
级别处理的
在上面,我使用的是delegate
,因为我喜欢它是多么明确。使用jQuery 1.7或更高版本,您可以使用方式过载 - on
function代替:
$("#subscriptions-tbody").on("click", "a", function(event) {
var row = $(this).closest('tr');
// ...delete the row
return false; // Don't try to follow the link
});
请注意,参数的顺序略有不同。
答案 1 :(得分:1)
试试这个:
<table class="table" id="subscriptions">
<tbody id="subscriptions-tbody">
<tr data-id="1">
<td>Item 1</td>
<td><a href="#" class="delete">delete</a></td>
</tr>
<tr data-id="2">
<td>Item 2</td>
<td><a href="#" class="delete">delete</a></td>
</tr>
<tr data-id="3">
<td>Item 3</td>
<td><a href="#" class="delete">delete</a></td>
</tr>
</tbody>
</table>
您将为删除锚点命名一个类,假设为class="delete"
,并且您将data-id
属性放置到表格行,以便唯一标识每个项目并知道要向其发送的ID服务器
现在你的js看起来像这样:
$("#subscriptions-tbody").on('click', 'a.delete', function(e){
var tr = $(e.currentTarget).closest('tr');
//get the id
var id = tr.attr("data-id");
//make ajax request
$.ajax({
url: 'script.php',
data: id,
success: function(data) {
//hide the item or remove
tr.remove(); // tr.hide();
// ajax callback
}
});
});
答案 2 :(得分:1)
您应该使用data-
attributes在id
上保留服务器端所需的信息(,如tr
),然后使用.on()
从表中处理事件..
<强> HTML 强>
<table class="table" id="subscriptions">
<tbody id="subscriptions-tbody">
<tr data-id="3">
<td>Item 1</td>
<td><a href="#" class="delete">delete</a></td>
</tr>
<tr data-id="5">
<td>Item 2</td>
<td><a href="#" class="delete">delete</a></td>
</tr>
<tr data-id="6">
<td>Item 3</td>
<td><a href="#" class="delete">delete</a></td>
</tr>
</tbody>
</table>
<强>脚本强>
$("#subscriptions").on("click", "a.delete", function(e) {
e.preventDefault();
var row = $(this).closest('tr'),
relatedId = row.data('id');
$.post(...); // use relatedId here
row.fadeOut(500, function(){
row.remove();
})
});
答案 3 :(得分:1)
您可以将ID作为data-
属性存储在控件或行中。将click处理程序委托给表itleslf,以考虑使用on()
方法运行代码时不存在的动态添加元素。
HTML:
<!-- class added to element -->
<a href="#" class="delecte-btn" data-id="3">delete</a>
JS
$('#subscriptions').on('click', '.delete-btn',function(evt){
evt.preventDefault();
var id=$(this).data('id'), $row=$(this).closest('tr');
/* send data to server and remove row on success*/
$.post('serverUrl.php', { rowID: id, action :'delete'}, function(){
$row.remove();
})
})