jQuery:在加载数据的元素本地激活AJAX事件

时间:2010-08-17 01:21:01

标签: ajax events jquery

我一直在玩jQuery中订阅AJAX事件的元素。

我有一个用于加载AJAX响应的元素。仅当存在与程序的当前上下文相关的数据时才显示该元素。

所以,我认为只要AJAX请求在其上完成并且在我需要时隐藏它就会很好并且很容易.show()。我想在每次发出AJAX请求时都不需要隐式地使用.show()元素。

在jQuery中有.ajaxSuccess()和.ajaxComplete()。然而,这些将在任何AJAX请求完成/成功时触发,因此当在页面的其他部分加载数据时,我的隐藏元素将为.show()。

解决方案似乎是(根据jQuery API参考)在事件处理函数中使用ajaxOptions参数:

$('.log').ajaxComplete(function(e, xhr, settings) {
  if (settings.url == 'ajax/test.html') {
    $(this).text('Triggered ajaxComplete handler.');
  }
});

我不明白的是为所有AJAX请求注册事件处理程序到特定元素的原因,除了能够使用$(this)。我错过了什么,我可以为特定于元素的AJAX请求注册一个事件处理程序吗?

如果没有,是否有任何事件驱动替代使用.url?我问的原因是我广泛使用页面片段来跟踪页面状态,每当AJAX请求将数据加载到它时,就会更容易拥有一个事件处理程序.show()my元素。

编辑:帖子标题语法。

2 个答案:

答案 0 :(得分:0)

我的想法是,你想要这样的东西:

$(document).ajaxComplete(function(e, xhr, settings) {
    if(settings.url == 'ajax/test.html') {
      $('#foo').text('Triggered ajaxComplete handler.');
    } else if(settings.url == 'ajax/another.html') {
      $('#bar').text('Triggered ajaxComplete handler.');
    }
});

这是否有意义,还是我完全忽略了这一点?

答案 1 :(得分:0)

将全局事件处理程序绑定到AJAX请求,然后使用事件目标成员决定显示元素:

$(document).ajaxSuccess(function (event, xhr, settings) {
    if ($(event.target).is('#main'))
        $('#main').show();
});

能够触发仅针对特定元素的AJAX请求会很好,但似乎没有办法。

编辑:语法