如果oninput耗时太长,则填充文本框

时间:2016-02-10 09:42:16

标签: jquery backbone.js underscore.js

我有一个事件(文本框的oninput)与特定文本进行比较。这不是服务器调用。但由于大量处理(5秒),事件响应会延迟。问题是,直到5秒过去,我输入的字符不会出现在文本框中。当oninput函数完成时,它显示char(即5秒后)。

作为解决方案,我希望文本首先出现(无论我输入哪个),然后再调用事件函数。

MyGridView = Backbone.View.extend({
 events: {
       'input input#EmailTxtBox': 'emailTextChanged'
 },

 emailTextChanged: function() {
        //offline search through already fetched data
        //no server call
 }
});

没有同步/异步调用的问题因为我已经在另一个函数中获取了数据,而我只是在搜索这些数据。此外,我必须处理键盘和鼠标的输入,因此专门选择oninput事件。我可以自由使用下划线和放大器中的任何功能。骨干。有什么建议?在此先感谢。

1 个答案:

答案 0 :(得分:1)

我认为正在发生的是emailTextChanged功能正在调用某些API 同步

问题是同步提取会立即阻止用户界面,直到它返回为止 - 这就是为什么你在输入内容和文本框中显示之间会遇到延迟的原因。

为避免阻止UI,您应该异步进行此提取并使用 complete回调做事。

示例:

$.ajax({
   url: 'http://yourendpoint',
   async: true,
   complete: function(data){
      // Do the things
   }
});

注意:使用ajax,异步是默认行为。但是,可以通过在$.ajaxSetup中设置选项来定义所有ajax请求的行为 - 检查async: false没有被设置在您不知道的其他地方。

https://api.jquery.com/jquery.ajax/

https://api.jquery.com/jquery.ajaxsetup/