2013-06-04 99 views
3

我有一個列表視圖中的項目列表。點擊一個li發送一個JSON請求並打開一個描述頁面。防止列表視圖上的更多點擊事件(一次點擊)

由於描述頁面打開需要1或2秒,所以有時間點擊列表中的另一個項目,然後觸發更多的事件,這是我不想要的。這最終會使滾動(使用iscrollview)在返回列表時滾動底部條上下移動。

如何在處理打開說明頁面時停止在列表視圖上輕敲更多按鈕?

+0

您可以禁用任何點擊任何列表視圖項目,並啓用它們時,Ajax請求完成。 – Omar

回答

1

沒有任何可以看的,我們很難幫助你。

但是,避免這種情況的最簡單方法是使用全局變量作爲標誌。

您將設置全局變量(即:在你的JavaScript文件的根級別),爲假:

tapProcessing = false; 

然後,每當你開始處理你,覈對該標誌和 - 如果不是真的,然後處理。

這裏有一個基本的例子來向你展示我的意思:

$('.selector').click(function(e){ 
    if(!tapProcessing){ 
     //the function is not processing, therefore set the flag to true: 
     tapProcessing = true; 

     //do your load/etc, and reset the flag to false in the callback (when finished): 
     $.get("test.php", function(data) { 
      // process your data here 
      // set your flag back to false: 
      tapProcessing = false; 
     }); 
    }else{ 
     //the function is already being processed from a previous click 
    } 
    e.preventDefault(); //assuming it's a link 
}); 
+0

非常棒!謝謝你。 –

-1

下面是我添加的代碼位:

EL是我的名單,事件是着陸頁 設置tapProcessing爲假應該只在「changePage()請求完成將頁面加載到DOM並且所有頁面轉換動畫已經完成」之後完成「(JQM doc:http://jquerymobile.com/demos/1.2.0/docs/api/events.html

$('#el').click(function(e){ 
    if(tapProcessing) { 
     alert('prevent'); 
     e.preventDefault(); //assuming it's a link 
    } else { 
     alert('oktap'); 
     tapProcessing = true; 
    } 
}); 

$(document).bind("pagechange", function(event, options) { 
if(options['toPage']['selector'] == '#event') { 
     tapProcessing = false; 
    } 
}); 

如果我收到斷開事件或超時,我也將tapProcessing設置爲false。