0

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

id 就像是在我的新动态元素上注册点击。

谢谢阅读

4

3 回答 3

1

你用live对了,但我不认为你想要这个'change'事件。你应该'click'改用。此外,与其使用ul#foo选择器,不如回到原来的ul#foo li p a#delete选择器。

就像是:

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

});

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

相反<a href="#" id="delete">,您可以<a href="#" class="delete">将选择器更改为ul#foo li p a.delete.

于 2011-04-13T19:50:07.800 回答
1

你想要 jQuery 委托()。

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

它的工作原理类似于,.live但它更容易一些,并且建议使用.live它实际上只是为了向后兼容而保留。

于 2011-04-13T19:51:09.467 回答
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) {
    ...
});
于 2011-04-13T19:51:59.000 回答