我有一个事件(文本框的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事件。我可以自由使用下划线和放大器中的任何功能。骨干。有什么建议?在此先感谢。
答案 0 :(得分:1)
我认为正在发生的是emailTextChanged
功能正在调用某些API 同步。
问题是同步提取会立即阻止用户界面,直到它返回为止 - 这就是为什么你在输入内容和文本框中显示之间会遇到延迟的原因。
为避免阻止UI,您应该异步进行此提取并使用
complete
回调做事。
示例:强>
$.ajax({
url: 'http://yourendpoint',
async: true,
complete: function(data){
// Do the things
}
});
注意:使用ajax,异步是默认行为。但是,可以通过在$.ajaxSetup
中设置选项来定义所有ajax请求的行为 - 检查async: false
没有被设置在您不知道的其他地方。