Jquery 如何将链接的事件添加到表中
假设我有一张桌子:Jquery 如何将链接的事件添加到表中,jquery,html,Jquery,Html,假设我有一张桌子: <table id="myTable"> <tbody> <tr> <td> <a class="removeLink" >Remove</a> </td> </tr> <tr> <td>
<table id="myTable">
<tbody>
<tr>
<td>
<a class="removeLink" >Remove</a>
</td>
</tr>
<tr>
<td>
<a class="removeLink" >Remove</a>
</td>
</tr>
</tbody>
</table>
<a id="addLink">Add</a>
去除
去除
添加
因此,游戏的目的是,当点击删除链接时,关联的行将消失
所以我有一些javascript:
<script type="text/javascript">
$(document).ready(function () {
$('.removeLink').click(function () {
$(this).closest('tr').hide('slow');
});
$('#addLink').click(function () {
$('#myTable').append('<tr><td><a class="removeLink" >Remove</a></td></tr>');
});
});
</script>
$(文档).ready(函数(){
$('.removeLink')。单击(函数(){
$(this).closest('tr').hide('slow');
});
$('#addLink')。单击(函数(){
$('#myTable')。追加('Remove');
});
});
所以我有一部分在处理这个
但是,“添加”链接会向表中添加一行
现在,当我在已添加的行上单击“删除”时,它不会消失。有道理,因为它还没有点击
事件设置
如何对此进行编码,以便添加的链接将其removeLinks连接起来以隐藏
这是否也是一种奇怪的方式来添加行?有更好的方法吗?您可以在()上使用
:
on()
实质上是将命名事件绑定到指定元素(#myTable
),并且,在“听到”这些事件时,事件检查目标是否匹配提供的选择器(传递给on()的第二个参数)
方法。如果是,则执行匿名的第三个参数函数
似乎最好将事件处理绑定到最接近DOM中事件处理/绑定点处受事件影响的元素的元素。在这种情况下,这将是tbody
,这将导致以下(仅轻微)修改代码:
$('#myTable tbody').on('click', 'a.removeLink', function(e){
$(this).closest('tr').remove();
}
其他备选方案有delegate()
(尽管这已被jQuery 1.7中的on()
所取代):
或者live()
,尽管这在jQuery 1.7中已被弃用,而且即使在live()
可用的地方,也建议优先使用delegate()
。也就是说:
$('#myTable').live('click', 'a.removeLink', function(e){
$(this).closest('tr').remove();
}
参考资料:
:
on()
实质上是将命名事件绑定到指定元素(#myTable
),并且,在“听到”这些事件时,事件检查目标是否匹配提供的选择器(传递给on()的第二个参数)
方法。如果是,则执行匿名的第三个参数函数
似乎最好将事件处理绑定到最接近DOM中事件处理/绑定点处受事件影响的元素的元素。在这种情况下,这将是tbody
,这将导致以下(仅轻微)修改代码:
$('#myTable tbody').on('click', 'a.removeLink', function(e){
$(this).closest('tr').remove();
}
其他备选方案有delegate()
(尽管这已被jQuery 1.7中的on()
所取代):
或者live()
,尽管这在jQuery 1.7中已被弃用,而且即使在live()
可用的地方,也建议优先使用delegate()
。也就是说:
$('#myTable').live('click', 'a.removeLink', function(e){
$(this).closest('tr').remove();
}
参考资料:
on()
不起作用,您可以尝试live()
它会检查单击的元素在#myTable中是否为“a”,而不是检查页面加载时元素是否在DOM中。这样,您就可以动态地将元素添加到页面中,仍然可以获得预期的效果。如果on()
不起作用,您可以尝试live()
它会检查单击的元素在#myTable中是否为“a”,而不是检查页面加载时元素是否在DOM中。这样,您可以动态地将元素添加到页面中,仍然可以获得预期的效果
$('a.removeLink').live('click', function(e){
$(this).closest('tr').remove();
});