0

HTML+jquery mobile に小さなダッシュボードがあり、多数のボタン、スライダー、チェックボックス、数値入力などが含まれています。

明らかに、アクション (フィールドへの変更など) をバックエンドへの呼び出しに接続したいと考えています。ただし、誰かがスイッチ ボタンを 3 回続けてすばやく押した場合、これらのボタンのクリックは実際にはハードウェアに影響を与えるため、3 つのバックエンド呼び出しをトリガーしたくありません。

私が望むのは、これらのボタン/スライダー/チェックボックスのそれぞれが、X 秒の遅延後にのみバックエンド呼び出しをトリガーすることです (ユーザーが、入力された数値、スライダー、またはチェックボックスに本当に必要な値があると判断したと考えた場合)。

このようなことを達成するための最もエレガントな方法は何でしょうか?

4

3 に答える 3

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/

于 2013-07-11T15:55:36.763 に答える
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/

于 2013-07-11T15:57:50.190 に答える
0

いくつかの呼び出しを書いていたときajax、バックエンド呼び出しが成功または失敗するまでボタンを無効にしました。また、.one()jQuery には、目的に応じて役立つメソッドがあります。

$("#input").prop('disabled', true);
于 2013-07-11T15:51:39.237 に答える