jQuery事件处理程序用于输入(文本类型)

3

我试图准备一些通过ajax返回的数据进行过滤和排序的功能,但我无法解决一个问题。

我在许多网站和Web应用程序中看到了处理文本输入字段的非常有趣的方式。当您输入内容时,什么也不会发生,但是如果您停止大约3秒钟,它就会启动并进行ajax请求,因此我开始尝试使用许多内置的jquery函数进行实验,但没有一个能够按照这种方式工作。

keyup在您为字段提供每个字符时都会触发,因此行不通

change需要您在字段外单击才能触发,这是可怕的解决方案

mouseleave对于文本输入字段不起作用,离开输入时什么也不会发生

mouseout,好吧,这个可以工作,当我将鼠标移出字段时,它就会触发,但它仍然要求用户每次调整搜索时都要移动鼠标进出,这比change方法更糟糕

inputkeypresskeydownkeyup相同,它们只有视觉上的区别,但方法保持不变,因此不行

因此,我想要实现的方法是在您停止输入后一段时间启动,并且不需要任何鼠标移动或单击,尽管我不知道如何解决它。

HTML

<input type="text" class="adjust" />

Javascript

$('.adjust').on('change', function() {
    alert('event has fired');
});

如果有人愿意帮忙,我已经准备了一些初始的jsfiddle来进行实验: http://jsfiddle.net/eag9e/

"input"是处理这种情况最好的事件,因为它还会在粘贴(使用鼠标)或影响字段的外部元素时触发。您只需要添加一个定时器,每当用户输入任何内容时就重置它。 - James Donnelly
1个回答

5

试试这个...

var keyupTimeoutID = 0;

$('.adjust').on('input', function() {
    clearTimeout(keyupTimeoutID);
    keyupTimeoutID = setTimeout(function() {
        alert('event has fired');
    }, 1000);
});

jsfiddle示例

每次值改变时,它会创建一个超时,清除任何先前的超时。我将其设置为1秒,但您可以根据需要进行更改。


这正是我正在寻找的,太完美了,现在我知道他们是如何做到的;)谢谢你的帮助。 - Mevia
没问题 - 很高兴能帮助你 :) - Reinstate Monica Cellio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接