我编写了一个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()的内容吗?难住了。
答案 0 :(得分:9)
直播活动目前仅适用于 用于对选择器。例如, 这样可行:$(“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
});
希望它有所帮助!