2012-10-23 34 views
1

我试图删除通过输入文本并单击链接示例中的“添加另一个”链接生成的项目之一,但jquery不会从生成的内容中触发。如果我将事件处理程序附加到另一个对象,该函数会触发,但不会从生成的链接触发,有什么方法可以解决这个问题?在下面的代码中;当用户点击类delLink的链接时,我想要该链接的周围div以及该div中的所有元素被删除(擦除)。jquery无法从生成的内容中触发功能

<div class="regItm"> 
    <input properties...><a class="delLink" properties...>X</a> 
</div> 
<div class="regItm"> 
    <input properties...><a class="delLink" properties...>X</a> 
</div> 
... 
... 

http://jsfiddle.net/KYkJn/2/

+0

解决它的代码为nrodic,thx! –

回答

3

试试这个:

$('.delLink').live('click', function(){ 
    alert('ohoy'); 
    $(this).closest('div').remove(); 
}); 

既然你动态地添加项目到DOM,您目前的功能(在页面加载的状态)并不适用于他们。

为了解决这个问题,有live()函数。这可以确保可以处理DOM中当前和未来的选择器。

+0

不错..大多数忘记.live()确保动态元素被添加到DOM – Zak

+3

就是这样。但由于“[从jQuery 1.7开始,.live()方法已被弃用,使用.on()附加事件处理程序。](http://api.jquery.com/live/)”我会推荐'$ (“#basket”)。on(“click”,“.delLink”,function(){' – nrodic

+0

哦,哇,我没有注意到现有的弃用标签,将我的旧代码转换到on():)。编辑:显然,[.live()现在只是.on()]的一个别名(http://www.jquery4u.com/jquery-functions/on-vs-live-review/)。 – noko

0

您在执行脚本和您的篮子实际上是空的时刻绑定您的事件。

推荐的方式做这样的事件与动态内容的结合是使用在()关闭()方法父元素:

$('#basket').on('click', '.delLink', function(e) { 
    alert('ohoy'); 
    $(this).closest('div').remove(); 
    e.preventDefault(); 
    return false; 
}); 
1

http://jsfiddle.net/Cz4Cy/

$('body').on('click', '.delLink', function() { 
    alert('ohoy'); 
    $(this).closest('div').remove(); 
}); 

你对于这种情况,应该使用事件代表。这将允许您为尚不存在的元素添加事件处理程序。上述

http://api.jquery.com/on/


代码仅是为了说明的目的。您应该避免在正文,文档或窗口中添加委派的事件侦听器。相反,将它们添加到您的容器中。

+0

我做了,但thx的建议! –