2012-06-12 20 views
0

我有这样一段代码:的ajaxSuccess不触发动态添加元素

$('.self_delete').on('ajaxSuccess', function(event, xhr, settings) { 
    json = jQuery.parseJSON(xhr.responseText); 
    if ($(this).attr('href') == json.delete_url) { 
     alert('going to delete'); 
     $(this).closest($(this).data('parent-selector')).remove(); 
    } else { 
     alert('not this one!'); 
    } 
}); 

这完全适用于它们已经是页面上的元素。但是,当我动态添加新的并单击.self_delete元素时,它不会触发ajaxSuccess(但链接工作)。

如果页面中已经有一些项目,我添加另一个项目,然后点击最新的项目来触发事件,警报“不是这一个!”。将触发现有元素,但不是新元素。

任何想法? ----编辑----- 我使用委托像这样:

$('#lists').on('ajaxSuccess', '.self_delete', function(event, xhr, settings) { 
    json = jQuery.parseJSON(xhr.responseText); 
    if ($(this).attr('href') == json.delete_url) { 
     alert('going to delete'); 
     $(this).closest($(this).data('parent-selector')).remove(); 
    } else { 
     alert('not this one!'); 
    } 
}); 

现在的事件永远不会触发,即使重新加载页面。但选择器很好,因为执行$('#lists .self_delete')确实会返回a.self_delete的数组! (睡觉,希望有人当我醒来THX建议!)

--- EDIT 2 ----- 如果我补充一点:

$('#lists').on('click', '.self_delete', function(event) { 
    alert('going to delete from click'); 
}); 

警报会被触发。在所有情况下。所以基本上,似乎.on()不能注册ajaxSuccess事件!我试图在谷歌上,但搜索与.on()相关的任何东西就像是想不到的不可能,它是如此常见的词:-S

回答

0

一旦创建动态内容,您将不得不重新应用绑定。

+0

这是什么.on()应该防止? – Alain

1

$('.self_delete'). < - 该部分正在运行一次 - 文档首次加载 - 并将您的处理函数附加到类self_delete的所有元素。

您需要使用委派。将处理程序附加到包含对象(在下面的示例中为.container),并在每次调用处理程序时评估.self_delete

$('.container').on('ajaxSuccess', '.self_delete', function(event, xhr, settings) ...

阅读交谈的几个人在聊天室后,更多关于.on()

0

,好像的ajaxSuccess必须被连接到一个元素并且不能泡了。所以我通过将.on()附加到.self_delete项目的父项并使用$ .ajax从而解决了我的问题,使得我可以按预期访问ajaxSuccess。