有条件的去抖动,取决于event.keyCode

我有一个搜索字段,它接受用户输入并使用去抖动事件监听器发出ajax请求。

HTML:

 

JavaScript的:

 function makeRequest() { // make ajax request, do things with the information } $('#search').on('keypress', _.debounce(makeRequest, 200)); 

我需要事件监听器不要在箭头上下使用去抖动的ajax函数,即event.keyCode === 38event.keyCode === 40

有没有办法将这个问题的建议应用到我的问题中?

确保保存结果并仅调用该函数,在每个按键上创建函数会产生不必要的开销。

 var debounced = _.debounce(makeRequest, 200); $('#search').on('keypress', function(event) { // just exit if it's an up or down arrow if (event.which === 38 || event.which === 40) return; debounced(); }); 

您只需要以不同的方式处理按键事件,您可以在其中查看事件属性。

试试这个……

 $('#search').on('keypress', function(event) { // just exit if it's an up or down arrow if (event.which === 38 || event.which === 40) return; _.debounce(makeRequest, 200)(); }); 

问题是对事件监听器的回调需要调用从_.debounce返回的函数,而不仅仅是创建去抖动函数。

 $('#search').on('keypress', function(event) { if (event.which === 38 || event.which === 40) { // do other things return; } _.debounce(makeRequest, 200)(); });