jQuery .live('click')仅绑定到页面上的第一个元素

时间:2009-10-27 17:17:56

标签: javascript jquery ajax

我编写了一个jQuery插件,它绑定到页面上的8个元素,我想使用.live()将click操作绑定到每个元素中的链接。当您单击链接时,它应使用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()的内容吗?难住了。

2 个答案:

答案 0 :(得分:9)

来自jQuery documentation

  

直播活动目前仅适用于   用于对选择器。例如,   这样可行:$(“li a”)。live(...)   但这不会:$(“a”,   someElement)。生活(...),两者都没有   这是:$(“a”)。parent()。live(...)。

在你的情况下,你在一个变量上调用live(),这个变量是find()调用的结果。那不是选择器。您需要找出一个标识所需元素的选择器。


编辑添加:对于后来发现此问题的任何人,现在首选的方法是使用函数on()on()函数没有相同的限制 - 因为它在jQuery对象上操作(而不是隐式绑定到文档),它可以在链接到达的元素集上设置,就像在原始问题中一样。

答案 1 :(得分:2)

尝试这样的事情。除选择器外,您不能使用“live”。

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

希望它有所帮助!