2010-08-17 70 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

相關問題