2015-05-13 23 views
3

我有一個輸入文本框,它通過AJAX使用這個Autocompleter Plugin爲Mootools自動填充。更好的替代'keyup'事件

我目前使用'鍵入'事件來通過AJAX獲取結果。 它的工作原理,但我覺得最好的是它有點笨重,因爲每個鍵盤按下結果成爲一個AJAX請求。

我寧願只做ONE一旦用戶輸入完成後,AJAX請求就像用戶暫停一下之後一樣。

我已經試過「變化」事件,但它是糟糕的是,我不得不從輸入文本框點擊即可只是爲了讓AJAX請求,然後再次單擊文本框中輸入剛纔有' onComplete'火了。

這裏是我的代碼:

input.addEvent('keyup', function(e) { 
    new Autocompleter.Request.JSON(input.getProperty('id'), url, { 
     'postVar': 'search', 
     'maxChoices': 6, 
     'overflow': false, 
     'selectMode': 'pick', 
     'delay': 100, 
     'forceSelect': false, 
     onRequest: function() { 
      // do nothing 
     }, 
     onComplete: function() { 
      // do nothing 
     } 
    }); 
}); 

我希望你們在這裏明白我的問題。

謝謝!

+0

@sergio說的是正確的做法。去抖動 - 也可以將關鍵字查找緩存作爲一個小散列圖引入,從而避免重複調用已查詢的字符串。 –

回答

0

執行上的按鍵功能,則凍結功能,幾秒鐘,你想

代碼:

input.addEvent('keyup', function(e) { 
    setTimeout(function(){ 
     new Autocompleter.Request.JSON(input.getProperty('id'), url, { 
      'postVar': 'search', 
      maxChoices: 6, 
      overflow :false, 
      'selectMode': 'pick', 
      delay : 100, 
      forceSelect:false, 
      onRequest: function() { 
       // do nothing 
      }, 
      onComplete: function() { 
       // do nothing 
      } 
     }); 
    },2000); //1000 = 1sec 
}); 

希望你在你的問題說:「我寧願把它解決您的問題一旦用戶輸入完成後,只需要一次AJAX請求,就像用戶暫停一下之後一樣。「

更多隻是評論。

謝謝...

1

更改選項'delay': 100,到一個更高的數字。

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – Krumia

+0

@Krumia是的,它的確如此。用戶正在使用一個自動完成插件,該插件有一個延遲選項用於延遲插件直到輸入完成。以供參考:http://stackoverflow.com/questions/30206436/better-alternative-to-keyup-event/30251724?noredirect=1#comment48561562_30207610 – Sergio

+0

請將這些信息添加到答案和解釋。你提供的參考資料是同一個問題。你確定你發佈了正確的鏈接嗎? – Krumia