问题描述
我有一个包含锚标记的列表项。单击X即可,这很好。但是,当我通过jQuery快速添加一个新列表项,然后单击此新列表项中的anchor标签时,单击未注册。下面的代码段。
点击时:
$(\'ul#foo li p a#delete\').click(function(){
alert(\'hmm\');
});
在ajax调用之后添加新元素:
onComplete: function(id,fileName,data){
$(\'ul#foo\').prepend(data.li);
}
现在,我认为它与DOM不了解新元素的事实有关?
所以经过一番谷歌搜索后,我意识到每个人都说要在\'change \'上使用.live()
所以我尝试了.live():
$(\'ul#foo\').live(\'change\',function() {
//something
});
多数民众赞成在卡住。香港专业教育学院从未使用过.live()。我是否缺少某些东西,我做错了吗?任何帮助,将不胜感激。
想要将点击注册到我的新即时元素上的ID是什么。
谢谢阅读
解决方法
您所困惑的实际上是选择器。通过jQuery选择正确的选项后,其余的操作将更容易进行。好的,所以您的html应该看起来像这样:
<ul>
<li><a class=\"someUniqueClassToTheseLinks\" href=\"whatever\"></a></li>
</ul>
这样,当您通过jQuery添加li时,它将如下所示:
<ul>
<li><a class=\"someUniqueClassToTheseLinks\" href=\"whatever\"></a></li>
<li><a class=\"someUniqueClassToTheseLinks\" href=\"whateverElse\"></a></li>
</ul>
现在,您的现场活动注册就是:
$(\'a.someUniqueClassToTheseLinks\').live(\'click\',function(event) {
...
});
,您需要jQuery proxy()。
http://api.jquery.com/delegate/
它的工作方式类似于.live
,但比.live
稍微容易一些,建议将其保留下来,而really6ѭ只是为了向后兼容而保留。
,您正在正确使用live
,但我认为您不想要\'change\'
事件。您应该改用\'click\'
。另外,您不想使用ul#foo
选择器,而是想回到原来的ul#foo li p a#delete
选择器。
就像是:
$(\'ul#foo li p a#delete\').live(\'click\',function(){
});
正如Milimetric指出的那样,由于选择器使用的是“ 14”选择器类型,因此这也将有其自身的问题。元素ID在页面上必须唯一。确实,您想要为要使用click事件处理程序捕获的所有元素分配一个css类,然后相应地更改选择器。
而不是<a href=\"#\" id=\"delete\">
,您可以做do16ѭ并将选择器更改为ul#foo li p a.delete
。