2010-10-20 69 views
2

我有這樣的代碼顯示加載圖像當我運行一個Ajax調用:什麼是在Ajax調用期間禁用鏈接的最佳方式。

$('.event').live('click', function() { 
    var spinner = $("<img src='/content/images/ajax-loader.gif' />").insertAfter(this); 

的問題是,因爲它的一個異步調用,如果你點擊一個鏈接多次,它會顯示與多個紡紗。顯然,這只是我不希望在第一次返回之前允許另一個Ajax調用的症狀。

在現有ajax調用的窗口期間「禁用」鏈接或按鈕的最佳方法是什麼?

回答

4

妙處.live()的是,它是基於選擇。

因爲該處理程序被觸發元素與.event類,只是改變它的類,並且處理程序不會再觸發。

$('.event').live('click', function() { 
    $(this).toggleClass('event event_clicked'); 
    var spinner = $("<img src='/content/images/ajax-loader.gif' />").insertAfter(this); 

這將刪除event類,並與event_clicked取代它,這樣的元素,隨後單擊不會觸發live()處理程序。

要恢復功能,只需再次交換類。

0

你可以做的是在你點擊鏈接後刪除鏈接上的監聽器(或者添加一個監聽器,只需要return false;來停止事件,然後在ajax調用完成之後,將監聽器重新分配給鏈接。它是爲停用狀態,作爲請求花費。

因此它可能是好的,回調存儲在一個單獨的變量,緩解分配。

0
  1. 您可以隱藏鏈接,或將其替換爲非功能性但視覺上相似的內容。

  2. 您可以使用視覺上類似的div覆蓋該鏈接,以防止人們點擊該鏈接。

  3. 您可以插入一個有狀態的開關,捕獲鏈接上的點擊並調用event.stopPropagation()。

當AJAX呼叫終止時,可以將其中的每一個重置爲其先前的狀態。

相關問題