我一直在玩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元素。
编辑:帖子标题语法。
答案 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请求会很好,但似乎没有办法。
编辑:语法