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