我正在尝试使用.live来确保我的元素即使在ajax调用之后也会响应click事件(在我的情况下我使用$ .post)所以例如在我的ajax调用之后我做这样:
$('.link').live({
click: function() {
alert('testing');
}
});
它不起作用。只有当我将其切换为使用这样的普通点击事件时:
$('.link').click(function() {
alert('testing);
}
它有效。但问题是 $ link 仅在每次ajax调用之后才出现给用户,并且是实际进行ajax调用的那个。因此,如果我使用正常的点击事件,它将仅在第一次ajax调用(我在第一次ajax调用之后绑定事件)之后工作一次,这是第一次显示$ link。
第一次显示$ link后,用户第一次点击该链接,它会在底部再次显示包含$ link的项目列表。但是,这次它不再起作用,因为我仍然只使用.live来绑定click事件。
如何使.live工作,这将使链接在N次点击后每次都能正常工作?
已编辑:将$ list更改为使用选择器。对于之前不清楚的信息感到抱歉。我实际上使用选择器来使用.live。我实际上是在尝试提供“查看更多”功能。因此,在用户在文本框中输入内容后,搜索结果将显示(通过ajax),并且底部会显示“查看更多”链接。当用户点击它时,更多相关的搜索结果将被附加到列表中,另一个“查看更多”链接将再次位于列表的底部。但是,这次它不再起作用了,因为我无法让.live使用它。
答案 0 :(得分:1)
你可以尝试,就像我一直这样:
$(".class").live("click", function () {
//Do something
});
答案 1 :(得分:0)
指定live
委托时使用选择器。例如:
$('.SomeClass').live(...
这会将事件绑定到文档,它将检查事件的来源。如果原点与选择器匹配,则触发事件处理程序。
绑定live
委托时必须使用选择器,不能使用任何其他遍历DOM的方法来查找元素,因为在事件发生时评估选择器,而不是代表受约束。
答案 2 :(得分:0)
我使用事件冒泡来解决问题。我所做的不是使用.live(),而是我这样做了:
$('.linkParent').click(function(event) {
$tgt = $(event.target);
if ($tgt.attr('class')=='link') { alert('works now!'); }
});
$('。link')总是在 $('。linkParent')内,而ajax调用始终只在中加载内容$( 'linkParent')强>