在jquery中,当有人没有输入1秒钟时,如何调用函数?

时间:2011-12-15 07:50:55

标签: jquery jquery-plugins

我有一个<div>,其中包含load()项的列表,其中包含由keyup()触发的文本输入中键入的关键字。当我还运行一个jquery插件,在keyup()的相应搜索项中突出显示该关键字时,它会减慢页面WAY,甚至可能导致我的浏览器崩溃。

所以我想知道是否有一种方法可以在一个人没有在一两秒内输入任何字符然后触发荧光笔后触发此突出显示功能。或者是否有某些方法可以将它保留在队列的末尾,以便它始终触发?

THX

3 个答案:

答案 0 :(得分:4)

保留像var myTimeout = null;这样的全局超时变量。在keyup()处理程序中,如果它仍在运行,您可以启动myTimeout = window.setTimeout(highlight, 1500);并取消(上一个)超时。在突出显示功能中,您将myTimeout重置为null。

中的某些内容
var myTimeout = null;

$('#whatever').keyup(function() {
   if(myTimeout) clearTimeout(myTimeout);
   ....
   myTimeout = window.setTimeout(highlight, 1500);
});

function highlight() {
   myTimeout = null;
   ...
}

答案 1 :(得分:2)

使用setTimeout将功能设置为在2s后运行,用户clearTimeout在2s完成之前取消此功能:

var timeoutId;

$("input").keyup(function(){

    if(timeoutId){
      clearTimeout(timeoutId);
    }

    timeoutId = setTimeout(intervalFunc, 2000); 
});

以下是一个示例:http://jsfiddle.net/tdbsY/

答案 2 :(得分:1)

您希望使用setTimeout来延迟调用以突出显示,并clearTimeout如果在一秒钟之前收到新的击键:

var timeout;

$('#my-input').keyup(function() {

    // clear previous timeout if there was one
    window.clearTimeout(timeout);

    // set new one
    timeout = setTimeout(function() {

        // make your highlight call here

    }, 1000);

});