0

我有这段代码:

$('.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 (但链接有效)。

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

有任何想法吗?----EDIT----- 我像这样使用委托:

$('#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!)

---编辑2-----如果我添加这个:

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

警报会触发。在所有情况下。所以基本上,似乎 .on() 无法注册 ajaxSuccess 事件!我试图用谷歌搜索,但搜索与 .on() 相关的任何内容就像错过了不可能,这是一个常见的词:-S

4

3 回答 3

1

$('.self_delete').<- 这部分运行一次 - 第一次加载文档 - 并将您的处理功能附加到类的所有元素self_delete

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

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

阅读更多关于.on()

于 2012-06-12T05:24:41.360 回答
0

在聊天室与几个人交谈后,似乎 ajaxSuccess 必须附加到一个元素并且不能冒泡。因此,我通过将 .on() 附加到 .self_delete 项的父项并从那里使用 $.ajax 来解决我的问题,这使我可以按预期访问 ajaxSuccess。

于 2012-06-12T14:52:08.193 回答
0

创建动态内容后,您必须重新应用绑定。

于 2012-06-12T05:23:32.213 回答