我在HTML + jQuery Mobile的一個小儀表盤裏面包含了一些按鈕,滑塊,複選框,數量投入等jQuery Mobile的事件延遲
很顯然,我想連接的操作(修改字段等等)調用後端。但是,如果某人快速連續三次按下切換按鈕,我不想觸發三個後端調用,因爲這些按鈕點擊實際上會產生硬件後果。
我想要的是每個這些按鈕/滑塊/複選框僅在X秒後才觸發後端調用(當我認爲用戶已決定輸入的數字,滑塊或複選框具有他們真正想要的值)。
什麼是實現這樣的最優雅的方式?
我在HTML + jQuery Mobile的一個小儀表盤裏面包含了一些按鈕,滑塊,複選框,數量投入等jQuery Mobile的事件延遲
很顯然,我想連接的操作(修改字段等等)調用後端。但是,如果某人快速連續三次按下切換按鈕,我不想觸發三個後端調用,因爲這些按鈕點擊實際上會產生硬件後果。
我想要的是每個這些按鈕/滑塊/複選框僅在X秒後才觸發後端調用(當我認爲用戶已決定輸入的數字,滑塊或複選框具有他們真正想要的值)。
什麼是實現這樣的最優雅的方式?
如果您在用戶停止輸入數據後特別想要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/
當我寫一些ajax
調用時,我禁用了按鈕直到後端調用通過或失敗。此外,在jQuery中有一個.one()
方法,可能有助於根據您想要的位置使用它。
$("#input").prop('disabled', true);
謝謝,禁用不是我想要的。我希望留下用戶來調整滑塊,然後例如最後一次更改後3秒,應該觸發事件。我查看了.one的定義,但我不認爲我可以使用它。 – Rok
它可能不是最優雅的方式,但它應該工作你的情況:
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/
嗨,Usman,我需要稍微不同的東西:我想要滑塊或複選框的最後一個值(例如最後一次更改後的3秒)被考慮併發送到後端。此代碼立即觸發事件,然後阻止下一個X秒。 – Rok
這將工作,但我希望滑塊或複選框的最後一個值(例如最後一次更改後的3秒)被考慮併發送到後端。 – Rok
在這裏更新使用mouseup()http://jsfiddle.net/aEftd/2/ – upopple
upopple,仍然不是我需要的不幸。在我的情況下,用戶應該能夠擺弄滑塊,例如5分鐘,但只有當他離開它3秒或更長時間後,纔會觸發後端的最後一個值。 – Rok