使用jQuery提交按钮的替代方法

时间:2014-03-05 19:39:24

标签: javascript jquery forms

目前我正在使用ajax post将数据传递给我的控制器,其中我从那里做我的魔法。我现在遇到的问题是我们已经删除了一个提交按钮,而是使用.keyup()附加了一个处理程序,在一个较小的数据库上,这非常有效!但是,当您将其移动到更大的数据库时,正如您可能猜到的那样,它会导致各种问题,从延迟响应到崩溃等等。因此它无法正常工作。我的问题是堆栈溢出但是这样:提交表单的用户友好版本是什么?   由于前端用户可能正在搜索单个字符值(例如,如用户ID 6中那样),因此我无法将其限制为最小字符提交。我们不想要一个延迟计时器,因为它可能会以几种不同的方式反击。所以我基本上排除了.delay().blur().keyup()

3 个答案:

答案 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对象的引用,并在发生其他请求时取消它。

我能正确理解您的问题吗?如果你需要一个书面的例子,我可以给你写一个小提琴。