jquery前置元素

jquery前置元素,jquery,dom,live,prepend,Jquery,Dom,Live,Prepend,我有一个包含锚标记的列表项。这不需要点击X,这很好。但是,当我通过jquery动态添加一个新列表项,然后单击这个新列表项中的锚标记时,单击没有被注册。下面是代码片段 点击: $('ul#foo li p a#delete').click(function(){ alert('hmm'); }); onComplete: function(id, fileName, data){ $('ul#foo').prepend(data.li); } $('

我有一个包含锚标记的列表项。这不需要点击X,这很好。但是,当我通过jquery动态添加一个新列表项,然后单击这个新列表项中的锚标记时,单击没有被注册。下面是代码片段

点击:

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

alert('hmm');
});
onComplete: function(id, fileName, data){
            $('ul#foo').prepend(data.li);
        }
$('ul#foo').live('change', function() {
    //something
});
在ajax调用后添加新元素:

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

alert('hmm');
});
onComplete: function(id, fileName, data){
            $('ul#foo').prepend(data.li);
        }
$('ul#foo').live('change', function() {
    //something
});
现在我认为这与DOM不知道新元素这一事实有关

所以在谷歌搜索之后,我意识到每个人都在说在“改变”上使用.live()

所以我尝试了。live():

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

alert('hmm');
});
onComplete: function(id, fileName, data){
            $('ul#foo').prepend(data.li);
        }
$('ul#foo').live('change', function() {
    //something
});
这就是我被困的地方。我以前从未使用过。live()。我错过了什么,我做错了吗?任何帮助都将不胜感激

我想要的是在我的新的动态元素上注册点击


感谢您阅读您使用的是
live
对,但我认为您不想要
'change'
事件。您应该使用
“单击”
。此外,您不需要使用
ul#foo
选择器,而是希望返回原始的
ul#foo li p a#delete
选择器

比如:

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

});
正如Milimetric所指出的,由于选择器使用的是
#id
选择器类型,因此这也有其自身的问题。元素ID在页面上必须是唯一的。实际上,您希望将一个css类分配给希望通过click事件处理程序捕获的所有元素,然后相应地更改选择器


您可以执行
,而不是
,并将选择器更改为
ul#foo li p a.delete
您正在使用
live
对,但我认为您不需要
'change'
事件。您应该使用
“单击”
。此外,您不需要使用
ul#foo
选择器,而是希望返回原始的
ul#foo li p a#delete
选择器

比如:

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

});
正如Milimetric所指出的,由于选择器使用的是
#id
选择器类型,因此这也有其自身的问题。元素ID在页面上必须是唯一的。实际上,您希望将一个css类分配给希望通过click事件处理程序捕获的所有元素,然后相应地更改选择器

您可以执行
,而不是
,并将选择器更改为
ul#foo li p a.delete
您需要jQuery delegate()

它的工作原理类似于
.live
,但它比
.live
更简单,建议使用它,因为它实际上只是为了向后兼容而保留的。

您需要jQuery delegate()


它的工作原理与
.live
类似,但它比
.live
更简单,建议使用它,因为它实际上只是为了向后兼容而保留的。

您现在的困惑实际上是选择器。一旦您通过jQuery选择了正确的东西,其余的就更容易了。好的,您的html应该更像这样:

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

你现在的困惑实际上是选择器。一旦您通过jQuery选择了正确的东西,其余的就更容易了。好的,您的html应该更像这样:

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

这不起作用,因为#delete是一个Id,页面上不能有多个Id。更好的选择器应该是
$(“#delete”)
。这将导致jQuery只调用一次
document.getElementById
。@Milimetric哇,我自己也没能做到。我通常从不那样做。我忘记了smarty foreach循环lol。谢谢:)。除此之外,还有下面的示例,如果已修复且效果良好,则所有示例都是有效的。这将不起作用,因为#delete是一个Id,并且页面上不能有多个Id。更好的选择器应该是
$(“#delete”)
。这将导致jQuery只调用一次
document.getElementById
。@Milimetric哇,我自己也没能做到。我通常从不那样做。我忘记了smarty foreach循环lol。谢谢:)。连同这个和下面的实例,如果修复得好的话,一切都会好起来。酷!我学到了一些东西。这里有一篇关于.live vs.delegate的好文章:。主要的区别是,委托可以被链接起来!我学到了一些东西。这里有一篇关于.live vs.delegate的好文章:。主要区别在于委托可以被链接