我有一个包含锚标记的列表项。这点击X就可以了。但是,当我通过jquery动态添加新的列表项,然后单击此新列表项中的锚标记时,单击未注册。代码片段如下。
点击:
$('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
});
这就是我陷入困境的地方。香港专业教育学院之前从未使用过.live()。我错过了什么,我做错了吗?任何帮助将不胜感激。
点击在我的新动态元素上注册的内容是什么。
感谢阅读
答案 0 :(得分:1)
您正在使用live
,但我认为您不希望发生'change'
事件。您应该使用'click'
代替。另外,不是使用ul#foo
选择器,而是希望返回原始的ul#foo li p a#delete
选择器。
类似的东西:
$('ul#foo li p a#delete').live('click', function(){
});
正如Milimetric指出的那样,由于您的选择器使用#id
选择器类型,因此它也有自己的问题。元素ID在页面上必须是唯一的。实际上,您需要为要使用click事件处理程序捕获的所有元素分配一个css类,然后相应地更改选择器。
而不是<a href="#" id="delete">
,您可以执行<a href="#" class="delete">
并将您的选择器更改为ul#foo li p a.delete
。
答案 1 :(得分:1)
答案 2 :(得分:1)
你遇到的困惑实际上是选择器。一旦你通过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) {
...
});