2013-07-11 151 views
0

我在HTML + jQuery Mobile的一個小儀表盤裏面包含了一些按鈕,滑塊,複選框,數量投入等jQuery Mobile的事件延遲

很顯然,我想連接的操作(修改字段等等)調用後端。但是,如果某人快速連續三次按下切換按鈕,我不想觸發三個後端調用,因爲這些按鈕點擊實際上會產生硬件後果。

我想要的是每個這些按鈕/滑塊/複選框僅在X秒後才觸發後端調用(當我認爲用戶已決定輸入的數字,滑塊或複選框具有他們真正想要的值)。

什麼是實現這樣的最優雅的方式?

回答

1

如果您在用戶停止輸入數據後特別想要x秒延遲,請使用設置超時和更新功能。當然,這會導致用戶體驗滯後。

var seconds = 3, timer; 

$(function(){ 

    var update = function(){ 
     $("#response").append("<p>run updates!</p>"); 
    } 

    $("#slider-1").change(function(){ 
     if(timer) clearTimeout(timer); 
     timer = setTimeout(update, seconds * 1000); 
    }); 

}); 

下面是一個的jsfiddle它http://jsfiddle.net/aEftd/4/

+0

這將工作,但我希望滑塊或複選框的最後一個值(例如最後一次更改後的3秒)被考慮併發送到後端。 – Rok

+0

在這裏更新使用mouseup()http://jsfiddle.net/aEftd/2/ – upopple

+0

upopple,仍然不是我需要的不幸。在我的情況下,用戶應該能夠擺弄滑塊,例如5分鐘,但只有當他離開它3秒或更長時間後,纔會觸發後端的最後一個值。 – Rok

0

當我寫一些ajax調用時,我禁用了按鈕直到後端調用通過或失敗。此外,在jQuery中有一個.one()方法,可能有助於根據您想要的位置使用它。

$("#input").prop('disabled', true); 
+0

謝謝,禁用不是我想要的。我希望留下用戶來調整滑塊,然後例如最後一次更改後3秒,應該觸發事件。我查看了.one的定義,但我不認爲我可以使用它。 – Rok

0

它可能不是最優雅的方式,但它應該工作你的情況:

var flag=1; 
function resumeEvents() { 
    //reset flag to 1 to accept the input again after time 
    flag=1; 
} 

$(function() { 
    $("#button").click(function() { 
     if(flag==1){ 
      //perform your task 
      alert("Task performed"); 
      //set flag to 0 so it doesn't accept more clicks 
      flag=0; 
      //time to pause before next click is accepted. 
      setTimeout(resumeEvents, 3000); 
     } 
    }); 

}); 

撥弄你的情景: http://jsfiddle.net/bmRsr/

+0

嗨,Usman,我需要稍微不同的東西:我想要滑塊或複選框的最後一個值(例如最後一次更改後的3秒)被考慮併發送到後端。此代碼立即觸發事件,然後阻止下一個X秒。 – Rok