jquery prepend元素

时间:2011-04-13 19:47:44

标签: jquery dom live prepend

我有一个包含锚标记的列表项。这点击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()。我错过了什么,我做错了吗?任何帮助将不胜感激。

点击在我的新动态元素上注册的内容是什么。

感谢阅读

3 个答案:

答案 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)

你想要jQuery delegate()。

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

它与.live的工作方式类似,但它比.live更容易一些,而且只是为了向后兼容而保留。

答案 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) {
    ...
});