2010-08-17 40 views
1

我一直在玩jQuery中的订阅元素AJAX事件。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()我的元素就会更容易。

编辑:发布标题语法。

+0

你可以举一些你加载数据的地方的例子吗? – 2010-08-17 01:33:21

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

这是否有意义,还是我完全错过了点?

+0

是的,这是有道理的,这是一个很难的词组。我的问题是,我想注册一个元素的本地AJAX事件处理程序。所以如果我有

,我需要一个非全局事件,当我为注册到$('#main')的处理程序执行$('#main')。load('bla.html')时触发。 – 2010-08-17 01:36:28

相关问题