2017-01-11 18 views
0

を変更したときに一度だけ、私はRailsのに付属しているライブラリを使用しています発射する「変更」イベントを指示するには、RailsのUJSと呼ばれる:https://github.com/rails/jquery-ujsUJS:入力フィールドが

それは、火災時にすることを「change.rails」と呼ばれるカスタムイベントがあります入力フィールドが変更され、フィールドから離れてタブされます。 https://itsjavi.com/bootstrap-colorpicker/

選択ピッカーの値を変更すると、入力フィールドが更新され、カラーピッカーをスクロールすると何百万という変更イベントが発生し、何百万というajaxリクエストが発生します。サーバーに送信されます。

私はその問題を回避する方法を知りません。私は3秒後にAJAXリクエストを送信するだけにタイマーを追加しようとしましたが、色を変更するとき、それはまだ、AJAXリクエストの数百万人を送信します。

color_picker: function(){ 
     $color_picker.on('change.rails', $form_holder, function(event, xhr, settings) { 
      setTimeout(function(){ 
       $color_picker.trigger('change.rails'); 
      }, 3000) 
      event.preventDefault(); 
     }) 
    } 

私はこの問題を回避するにはどうすればよいですか?

var timeout = setTimeout(function(){}, 3000); 

そして、あなたは呼び出すことにより、そのタイムアウトを取り消すことができます:

答えて

1

あなたはそれを変数に設定して、タイムアウトへの参照を格納することができますが、いつでもタイムアウトをクリアした場合

clearTimeout(timeout) 

'change.rails'イベントが発生すると、タイムアウトが完了するまで延期されたajaxメソッドは起動しません。

color_picker: function(){ 

    var timeout; 

    $color_picker.on('change.rails', $form_holder, function(event, xhr, settings) { 

     clearTimeout(timeout); 

     timeout = setTimeout(function(){ 
      $color_picker.trigger('change.rails'); 
     }, 3000) 
     event.preventDefault(); 
    }) 
} 
関連する問題