我很生气 - 也许有人能够帮助我。
我需要在AJAX调用后将点击重新绑定到链接,但由于某种原因它不想工作。
这是我的代码:
if ($('.active').length > 0) {
$('.active').click(function() {
var elem = $(this);
var url = $(this).attr('href');
$.ajax({
url: url,
dataType: 'html',
success: function(data) {
elem.replaceWith(data);
}
});
$('.active').bind('click'); return false;
});
}
有什么想法吗?
感谢您的回复 - 我修改了代码,但问题仍然存在:
function makeActive() {
if ($('.active').length > 0) {
$('.active').click(function() {
var elem = $(this);
var url = $(this).attr('href');
$.ajax({
url: url,
dataType: 'html',
success: function(data) {
elem.replaceWith(data);
}
});
$('.active').live('click', makeActive);
return false;
});
}
}
$('.active').live('click', makeActive);
答案 0 :(得分:31)
更新于2012年10月31日
从jQuery 1.7开始,推荐的方法是使用on
-
$(document).on('click', '.active', function () {
// click handler code goes here
});
您可以尝试以下方法吗?
$('.active').live('click', function()
{
// click handler
});
答案 1 :(得分:21)
如果要在 Ajax调用之后执行,则必须在success
处理程序中添加重新绑定:
success: function(data) {
elem.replaceWith(data);
$('.active').bind('click', /* some function needs to go here*/);
}
也就是说,在这种情况下,live()
或delegate()
可能是更好的选择[更新:>现在jQuery 1.7已经用完,所有内容都可以通过{{3 }}。如果您还有其他未被替换的.active
链接,这也会阻止点击处理程序的双重分配。
更新:关于更新后的代码:您使用live
的方式无法实现其目的。请阅读.on()
]。你正在做的是在点击链接时分配一个点击处理程序,这意味着你一遍又一遍地添加点击处理程序。
这是您代码的改进版本。
$('.active').live('click', function(event) {
var elem = $(this);
var url = $(this).attr('href');
$.ajax({
url: url,
dataType: 'html',
success: function(data) {
elem.replaceWith(data);
}
});
event.preventDefault();
event.stopPropagation();
});