搜索和 LazyLoad 跟不上打字速度?
Search & LazyLoad can't keep up w/ typing speed?
因此,所有代码都运行良好。一个查询的数据库,node/parent ID 被懒惰地传递给 jsTree,并且,如果在搜索栏中键入一个术语——类似的过程继续,但传递给 jsTree 的节点是另一个 SQL 查询(使用 SELECT nodeID FROM table WHERE name LIKE %searchTerm%
之类的东西)。
只有一个问题:
如果我在搜索栏中输入的速度太快,结果就会相互混淆。如果我打字很慢(我估计每秒最多输入 2 个字母),则一切正常。再快一点,一切都变得模糊起来。 (也就是说,如果我要搜索包含术语 "test" 的名称并快速输入,我会得到包含 "t"、"te"、"tes" 的名称, 和 "test" 而不仅仅是包含 "test" 的名称。)
有人遇到过这个问题吗?我应该使用一些 "wait until ready" 函数吗?
我可以建议您执行 'Timeout' 解决方法。基本上,您创建一个延迟 200-400 毫秒的 SetTimeout 函数并在那里启动您的 lazyload ajax。每个 inputbox.change 事件都会重新开始时间。请参阅伪 javascript:
中的示例
$('#your-input').keydown(function(){
if(ajaxTimer != undefined) {
clearTimeout(ajaxTimer);
}
ajaxTimer = setTimeout(function(){
$.ajax({...}).done(function() {...}
},400);
})
在打字输入上使用节流阀,基本上保证每 X 秒最多调用一次函数。当然你可以自己写,但是已经有一个很棒的图书馆了。
感兴趣的可以看看http://benalman.com/projects/jquery-throttle-debounce-plugin/
因此,所有代码都运行良好。一个查询的数据库,node/parent ID 被懒惰地传递给 jsTree,并且,如果在搜索栏中键入一个术语——类似的过程继续,但传递给 jsTree 的节点是另一个 SQL 查询(使用 SELECT nodeID FROM table WHERE name LIKE %searchTerm%
之类的东西)。
只有一个问题:
如果我在搜索栏中输入的速度太快,结果就会相互混淆。如果我打字很慢(我估计每秒最多输入 2 个字母),则一切正常。再快一点,一切都变得模糊起来。 (也就是说,如果我要搜索包含术语 "test" 的名称并快速输入,我会得到包含 "t"、"te"、"tes" 的名称, 和 "test" 而不仅仅是包含 "test" 的名称。)
有人遇到过这个问题吗?我应该使用一些 "wait until ready" 函数吗?
我可以建议您执行 'Timeout' 解决方法。基本上,您创建一个延迟 200-400 毫秒的 SetTimeout 函数并在那里启动您的 lazyload ajax。每个 inputbox.change 事件都会重新开始时间。请参阅伪 javascript:
中的示例$('#your-input').keydown(function(){
if(ajaxTimer != undefined) {
clearTimeout(ajaxTimer);
}
ajaxTimer = setTimeout(function(){
$.ajax({...}).done(function() {...}
},400);
})
在打字输入上使用节流阀,基本上保证每 X 秒最多调用一次函数。当然你可以自己写,但是已经有一个很棒的图书馆了。
感兴趣的可以看看http://benalman.com/projects/jquery-throttle-debounce-plugin/