我越来越愤怒 – 也许有人能够帮助我。
我需要在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,success: function(data) {
- elem.replaceWith(data);
- }
- });
- $('.active').live('click',makeActive);
- return false;
- });
- }
- }
- $('.active').live('click',makeActive);
解决方法
如果要在Ajax调用后执行,则必须在成功处理程序中添加重新绑定:
- success: function(data) {
- elem.replaceWith(data);
- $('.active').bind('click',/* some function needs to go here*/);
- }
也就是说,在这种情况下,live()
或delegate()
可能是更好的选择[更新:现在jQuery 1.7已经出来,所有事情都可以用.on()
]完成。这也将阻止点击处理程序的双重分配,以防止其他.active链接没有被替换
更新:关于你更新的代码:你正在使用的方式失败它的目的。请阅读documentation.您正在做的是在点击链接时分配点击处理程序,这意味着您一遍又一遍地添加点击处理程序。
这是您的代码的改进版本。
- $('.active').live('click',function(event) {
- var elem = $(this);
- var url = $(this).attr('href');
- $.ajax({
- url: url,success: function(data) {
- elem.replaceWith(data);
- }
- });
- event.preventDefault();
- event.stopPropagation();
- });