Javascript live(';单击';)仅绑定到页面上的第一个元素

Javascript live(';单击';)仅绑定到页面上的第一个元素,javascript,jquery,ajax,Javascript,Jquery,Ajax,我编写了一个jQuery插件,它绑定到页面上的8个元素,我想使用.live()将单击操作绑定到每个元素中的链接。当您单击链接时,它应该使用ajax发布一个表单。问题是所有8个元素的链接都会提交页面上第一个元素的表单。当我使用.click()时,一切正常。我更喜欢使用.live(),因为我需要动态添加更多元素 下面是一些与我正在做的类似的代码: var $container = $(this); var $form = $container.find('form.some_form');

我编写了一个jQuery插件,它绑定到页面上的8个元素,我想使用.live()将单击操作绑定到每个元素中的链接。当您单击链接时,它应该使用ajax发布一个表单。问题是所有8个元素的链接都会提交页面上第一个元素的表单。当我使用.click()时,一切正常。我更喜欢使用.live(),因为我需要动态添加更多元素

下面是一些与我正在做的类似的代码:

var $container = $(this);
var $form      = $container.find('form.some_form');
var $button    = $container.find('a.some_link');
这将仅提交第一个要素的表格:

$button
.live('click', function() {
  // some code that submits $form via ajax
});
但是,它始终提交正确的表格:

$button
.click( function() {
  // identical code that submits $form via ajax
});
关于.live()有什么我应该知道的吗?难倒。

来自:

实时事件当前仅在以下情况下有效: 用于对抗选择器。例如 这将有效:$(“LIA”).live(…) 但这不会:$(“a”, someElement)。生存(…)并且两者都不存在 这是:$(“a”).parent().live(…)吗

在本例中,您正在对find()调用的结果变量调用live()。那不是选择器。您需要找出一个选择器来标识所需的元素



编辑添加:对于以后发现此问题的任何人,现在首选的方法是使用函数
on()
on()
函数没有相同的限制——因为它对jQuery对象进行操作(而不是隐式绑定到文档),所以可以像最初的问题一样对通过链接获得的一组元素进行设置。

尝试类似的方法。除非在选择器上,否则不能使用“live”

$('a.some_link').live('click', function() {
    // some code that submits $form via ajax
});

希望有帮助

海报可能需要一个更复杂的选择器,因为看起来他在寻找与您提供的选择器匹配的元素,但只在给定的容器中。但不清楚容器是什么。@JacobM你说得对!我认为你的回答说明了一切。如果我在回复之前看到了你的帖子,我可能不会去其他地方了!;)这可以解释这种奇怪的行为:)在这种情况下,我看不到任何好的方法来使用.live()替换.click()。。。我想我会在向DOM中插入新元素后刷新我的插件,当然不是世界末日。你应该能够通过将容器的ID(假设它有一个)与你想要的元素/类连接起来来构造一个选择器。例如,如果容器的ID为“myDiv”,则可以执行$(“#myDiv>a.some_link”).live()。您可能需要通过执行诸如“#”+this.id+”>a.some_链接之类的操作来动态构造选择器字符串,但这应该是可能的。