1

私はずるいツールdarsa.inで作成した日付ピッカーを使用していますが、ユーザーが日を変更するのが速すぎると JavaScript が関数の正しい日付をトリガーしないことを除いて、すべてが完璧です。

方法はありますか:

if (datepicker not active for x seconds) 

または、変数を作成し、その変数が x 時間中に変更されない場合にのみ関数をトリガーする方法はありますか? ユーザーが目的の日付になるまで関数がトリガーされないように、JS に時間を与える必要があります。

いくつかのコードは以下のとおりです。

曜日ピッカーが変わると、loadDateMatches()すべての一致を HTML にロードする呼び出しを行います。ただし、たとえば、1 日目と 5 日目の間で非常に迅速に変更すると、3 日目に一致の読み込みが停止する場合があります。

日付を変更せずにしばらく時間が経過するまで機能をトリガーしない方法を探しています。loadDateMatches()

days.on('active', function (eventName) {
    activeDate= this.rel.activeItem;
    var logDate = new Date(d.getFullYear(), 0, activeDate + first + 1);
    var startTime = new Date(logDate.getFullYear(), logDate.getMonth(), logDate.getDate(), 0, 0, 0);
    DayBarConditions.startTime = startTime.getTime()/1000;
    var endTime = new Date(logDate.getFullYear(), logDate.getMonth(), logDate.getDate(), 23, 59, 59);
    DayBarConditions.endTime = endTime.getTime()/1000;
    if (typeof loadDateMatches == 'function') {
        loadDateMatches();
    }
});
4

2 に答える 2

0

このコードを使用すると、実行するリクエストの数を追跡できますloadDateMatches。最初の関数の場合、関数はすぐに実行されますが、クールダウン期間が経過するまで要求カウンターは減少しません。その後、カウンターが減少します。そのカウンターが 1 の間、別の要求を追加できますが、最初のクールダウン期間が終了したときにのみ実行されます。そのクールダウン期間中にそれ以上のリクエストを行っても何も変わりません。クールダウン後に最大で 1 つのリクエストの実行が保留されます。

var requests = 0;

days.on('active', function (eventName) {
    // ... your existing code, setting DayBarConditions properties, comes here.
    // ...
    if (typeof loadDateMatches == 'function') {
        // Keep track of number of requests            
        if (requests < 2) requests++;
        // Ignore this when there is currently a cool-down ongoing, and
        // another execution is already pending:
        if (requests == 2) return;
        (function loop() {
            loadDateMatches();
            setTimeout(function () {
                // Cool down has passed: repeat when new request is pending
                if (--requests) loop();
            }, 500);
        })();
    }
});

したがって、このコードは最初のリクエストを遅らせることはありませんが、その後のリクエストが 1 つに結合されるクールダウン期間を導入し、そのクールダウン期間が終了したときにのみ実行されます。

ただし、で実行しているコードによっては、より良い解決策がある場合がありますloadDateMatches

于 2016-09-15T13:18:01.017 に答える