2011-04-13 64 views
0

我有一个列表项,其中包含一个锚标记。这点击X就可以了,这很好。然而,当我通过jQuery添加一个新的列表项目,然后点击这个新列表项目中的锚点标签,点击没有注册。下面的代码片段。jquery prepend元素

点击时:

$('ul#foo li p a#delete').click(function(){ 

alert('hmm'); 
}); 

一个Ajax调用后添加新的元素:

onComplete: function(id, fileName, data){ 
      $('ul#foo').prepend(data.li); 
     } 

现在我认为它与事实DOM心不是知道新的做元件?

因此,一些谷歌上搜索,我意识到每个人都在说使用.live()上的 '改变' 后

所以我尝试.live():

$('ul#foo').live('change', function() { 
    //something 
}); 

多数民众赞成在IM卡。 ive之前从未使用过.live()。我错过了什么,我做错了吗?任何帮助,将不胜感激。

在我的新即时元素上注册点击是什么样的id。

感谢阅读

回答

1

您遇到的困惑实际上是与选择器有关。一旦你通过jQuery选择正确的东西,其余的更容易。好了,你的HTML应该看起来更像是这样的:

<ul> 
    <li><a class="someUniqueClassToTheseLinks" href="whatever"></a></li> 
</ul> 

,这样当你通过jQuery的添加利,它应该是这样的:

<ul> 
    <li><a class="someUniqueClassToTheseLinks" href="whatever"></a></li> 
    <li><a class="someUniqueClassToTheseLinks" href="whateverElse"></a></li> 
</ul> 

现在您的现场活动报名就是:

$('a.someUniqueClassToTheseLinks').live('click', function(event) { 
    ... 
}); 
+0

谢谢大家!效果很好 – fl3x7 2011-04-13 20:25:59

1

您使用live的权利,但我不认为你需要的'change'事件。您应该使用'click'。此外,而不是使用ul#foo选择器,你会想要回到原来的ul#foo li p a#delete选择器。

喜欢的东西:

​​

由于Milimetric指出,这将有自己的问题,以及,由于这样的事实,你的选择是使用#id选择类型。元素ID在页面上必须是唯一的。真的,你想要分配一个css类到你想用click事件处理器捕捉的所有元素,然后相应地改变你的选择器。

宁可然后<a href="#" id="delete">,你可以做<a href="#" class="delete">和改变你的选择。

+1

这是行不通的,因为#DELETE都是一个ID,不能有超过其中一个页面上。 – Milimetric 2011-04-13 19:52:43

+2

一个更好的选择将只是'$(“#删除”)'。这将导致jQuery的调用'document.getElementById'只有一次。 – wsanville 2011-04-13 19:52:58

+0

@Milimetric +1,你是对的。我没有注意到这一点。 – 2011-04-13 19:53:34

1

你想要jQuery委托()。

http://api.jquery.com/delegate/

它的工作原理类似于.live但它更容易一点,并建议在.live这是真的只保持周围向后兼容性。

+0

酷!我学到了东西。这里有一篇关于.live vs .delegate的文章:http://jquerybyexample.blogspot.com/2010/08/bind-vs-live-vs-delegate-function.html。主要的区别是,代表可以链接 – Milimetric 2011-04-13 19:55:10