0

コード内の特定の関数が立て続けに実行されると問題が発生します。私は、数行の JavaScript が、トリガーに満足している人々を妨げるのではないかと考えました。

そこで、使いたかったのがこちら。

   function change(){
   if(mod == 1 || mod == null){
   var mod=2;
   //function goes here    
   window.setTimeout(function(){var mod=1;}, 500);
   }

実際に機能するこれを行う方法はありますか?

また、私が考えていない、これに対するよりグローバルなアプローチがあるべきだとも感じています。

4

2 に答える 2

0

あなたの解決策はほとんど機能します。問題は、のクロージャを作成するのではなく、setTimeoutでmod呼び出される別の変数を作成することです。modこれは機能するはずです:

   function change(){
     if(mod == 1 || mod == null){
       var mod=2;
       //function goes here    
       window.setTimeout(function(){mod=1;}, 500);
     }
   }
于 2012-09-18T03:06:35.043 に答える
0

コールバックを抑制またはデバウンスできます。これらすべてをまとめてくれる素敵な (jQuery オプションの) ライブラリがあります: jQuery throttle/debounceです。

jQuery のスロットル/デバウンスを使用すると、複数の便利な方法で関数のレートを制限できます。遅延とコールバックを渡すと、ミリ秒$.throttleごとに 1 回しか実行されない新しい関数が返されます。delay遅延とコールバックを渡すと、$.debounce一度だけ実行される新しい関数が返され、最初または最後に複数の順次呼び出しが 1 つの実行にまとめられます。

欲しいとコメントしたばかりなので

一定期間が経過するまで機能を無効にする

デバウンスのユースケースを探しているようです。

于 2012-09-18T01:15:08.213 に答える