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

a10*_*10s 4 javascript ajax jquery

我写了一个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');
Run Code Online (Sandbox Code Playgroud)

这只会提交第一个元素的表单:

$button
.live('click', function() {
  // some code that submits $form via ajax
});
Run Code Online (Sandbox Code Playgroud)

但是,这总是提交正确的形式:

$button
.click( function() {
  // identical code that submits $form via ajax
});
Run Code Online (Sandbox Code Playgroud)

有什么关于.live()我应该知道吗?难住了.

Jac*_*son 9

jQuery文档:

直播活动目前仅在对选择器使用时才有效.例如,这将起作用:$("li a").live(...)但是这不会:$("a",someElement).live(...),这也不会:$("a ").parent().住(...).

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


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