目前我正在使用ajax post将数据传递给我的控制器,其中我从那里做我的魔法。我现在遇到的问题是我们已经删除了一个提交按钮,而是使用.keyup()
附加了一个处理程序,在一个较小的数据库上,这非常有效!但是,当您将其移动到更大的数据库时,正如您可能猜到的那样,它会导致各种问题,从延迟响应到崩溃等等。因此它无法正常工作。我的问题是堆栈溢出但是这样:提交表单的用户友好版本是什么?
由于前端用户可能正在搜索单个字符值(例如,如用户ID 6中那样),因此我无法将其限制为最小字符提交。我们不想要一个延迟计时器,因为它可能会以几种不同的方式反击。所以我基本上排除了.delay()
,.blur()
和.keyup()
。
答案 0 :(得分:2)
如果您的要求是不使用提交按钮,而是按用户类型处理输入,那么我过去曾使用过这样的解决方案。
首先定义一个管理延迟的函数,如下所示:
var inputDelay = (function () {
var timer = 0;
return function (callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();
然后对于你的实际ajax-call在你的onkeyup事件中执行类似的操作:
inputDelay(function () {
//AJAX-call goes here
}, 400)
请注意,这不是处理来自服务器的响应顺序的通用解决方案。您很可能会收到几个发送到服务器的AJAX请求,而且此代码不会确保您只处理最新的呼叫。
答案 1 :(得分:1)
处理您的情况的最佳方法是使用表单,并提交提交按钮。然后,您可以将事件侦听器添加到表单的提交事件,取消回发,然后进行处理。这将处理用户单击提交按钮以及从表单内按Enter键。
答案 2 :(得分:1)
我和你有同样的问题..我做的是以下内容: 我在keyup上使用过..如果用户停留在那里,我就开始搜索...说300毫秒或500毫秒..
当用户输入时我清除并重置setTimeout()..所以如果用户在超时时间内保持静止,则搜索将会触发。
此外,您可以获取xHR对象的引用,并在发生其他请求时取消它。
我能正确理解您的问题吗?如果你需要一个书面的例子,我可以给你写一个小提琴。