0

私はjQuery(最新リリース)を使用しており、フィールドが編集されてフィールドが終了するたびに呼び出される「calculate()」という関数があります(ぼかしなど)。(「動的」計算を可能にするため)計算は完了するのに4秒未満かかりますが、計算が完了する前にユーザーがフォーム上の別の要素を変更すると、それらはキューに入れられ、現在のアクションが完了した後に関数が再度呼び出されます。関数が開始されると処理を停止できないので、関数を数秒遅らせてから、フォーム要素が操作されるたびにタイマーに追加することは可能ですか。

これは不可能だと思いますが、試してみます。

私にはできることはわかっています setTimeout(function(){ ... }, 4000); が、このタイマーに追加する方法が必要です。(つまり、タイマーの残り時間が1秒で、フィールドをクリックして、タイマーを4秒に戻したい)

4

5 に答える 5

1

clearTimeout()これは、を実行する前に呼び出しsetTimeout()て保留中のアクションをクリアすることで処理できます。

// Declare the variable that holds the timeout pointer at a higher scope
var ts;

// in your onblur
// clear any pending pointer
if (ts) window.clearTimeout(ts);
// then reset the timeout and assign its handle to the same variable ts
ts = window.setTimeout(function() {}, 4000);
于 2012-06-20T15:40:47.980 に答える
1

私がすることはこのようなものです:

var isCalculating = false;
var calculateQueue = false;

function calculate(){
  isCalculating = true;

  // do calculations

  isCalculating = false;

  if(calculateQueue){
    calculate();
  }
}

$('element').blur(function(){
  if(!isCalculating){
    calculate();
  }
  else{
    calculateQueue = true;
  }
});

calculate()このようにして、同時機能を実行しません。無限のタイマーは必要ありません。「キューに入れられた」計算がある場合は、毎回4秒待つのではなく、最初の計算関数が停止した後に計算されます。計算関数を変更して時間がかかるとどうなりますか?

お役に立てれば。

于 2012-06-20T15:41:34.863 に答える
1

問題は、タイマーに追加することではなく、前のタイマーをクリアすることです。

あなたはそれを次のように行うことができます:

var delay = (function() {
    var time_id;
    return function(callback, ms) {
      if (time_id) {
         window.clearTimeout(time_id);
      }
      time_id = window.setTimeout(callback, ms);
  };
}());

// use it like
delay(function(){...}, 4000);
于 2012-06-20T15:46:43.663 に答える
0

他の人が述べているように、clearTimeoutこれを処理する方法です。これがどのように機能するかについての本当に基本的な例をまとめました。ボタンをクリックすると、関数が実行される前にタイマーがキャンセルされて再開されますが、このイベントは別のイベントに簡単にバインドできます(フィールドのフォーカスやぼかしなど、あなたがしているように見えます)

ここでclearTimeoutを使用して実行を遅らせる例>>

于 2012-06-20T18:04:06.733 に答える
0

新しいタイマーを開始するたびに、timeoutIDを覚えて、古いタイマーをリセットすることができます。

var timeoutID = null;
if ( timeoutID !== null ) {
  window.clearTimeout( timeoutID );
}
timeoutID  = window.setTimeout( function(){
  // your code here
}, 4000 );
于 2012-06-20T15:40:56.317 に答える