jQuery:在加载数据的元素本地触发AJAX事件

jQuery:在加载数据的元素本地触发AJAX事件,ajax,events,jquery,Ajax,Events,Jquery,在jQuery中,我一直在尝试向AJAX事件订阅元素 我有一个用于加载AJAX响应的元素。仅当存在与程序当前上下文相关的数据时,才会显示此元素 因此,我认为只要AJAX请求完成,就可以轻松地显示()并在需要时隐藏它。我想消除每次发出AJAX请求时隐式显示()元素的需要 在jQuery中有.ajaxSuccess()和.ajaxComplete()。但是,当任何AJAX请求完成/成功时,都会触发这些命令,因此当在页面的其他部分加载数据时,我的隐藏元素将.show() 解决方案似乎是(根据jQuer

在jQuery中,我一直在尝试向AJAX事件订阅元素

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

因此,我认为只要AJAX请求完成,就可以轻松地显示()并在需要时隐藏它。我想消除每次发出AJAX请求时隐式显示()元素的需要

在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.');
  }
});
我不明白的是,除了能够使用$(this)之外,为什么还要为特定元素的所有AJAX请求注册一个事件处理程序。如果我遗漏了什么,我可以为特定于某个元素的AJAX请求注册一个事件处理程序吗

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


编辑:发布标题语法。

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

$(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.');
    }
});

这有意义吗,还是我完全没有抓住要点?

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

$(document).ajaxSuccess(function (event, xhr, settings) {
    if ($(event.target).is('#main'))
        $('#main').show();
});
如果能够启动只针对特定元素的AJAX请求,那就太好了,但似乎没有办法


EDIT:Syntax

您能举几个例子说明您在哪里加载数据吗$('#main').ajaxSuccess(函数(e,xhr,settings){$('#main').show();});是的,这是有道理的,这是一个很难表达的问题。我的问题是,我想注册一个元素本地的AJAX事件处理程序。因此,如果有的话,我需要一个非全局事件,当我对仅注册到$('#main')的处理程序执行$('#main').load('bla.html')时触发该事件。