Javascript:setTimeout() - 需要帮助

标签 javascript jquery

我目前正在网页上执行突出显示功能,我为此使用了 jquery 插件。我的代码如下所示:

var input = function() {         
    var matchword = $('#searchbox').val();
    if(matchword != "") {
        $('body').removeHighlight();
        $('body').highlight($('#searchbox').val());
    }
}

$(document).ready(function() {
    $('#searchbox').keyup(function() {
        setTimeout("input()", 2000);    
    });
});

如果页面上没有那么大的数据,它工作正常。但是如果页面上有大量数据,整个过程就会变慢,这会导致输入框卡住,直到字母被突出显示。所以打字不是很流畅。我尝试使用 setTimeout,但似乎无济于事。有什么想法吗?

最佳答案

请不要向setTimeout传一个字符串,这种情况下没有必要,你可以像这样直接调用该函数:

$(function() {
    $('#searchbox').keyup(function() {
       if($(this).data("timeout")) clearTimeout($(this).data("timeout"));
        $(this).data("timeout", setTimeout(input, 2000));
    });
});

至于排队亮点的另一个问题,你只需要像上面那样先清除之前的超时(最多2秒前)。此外,您可以使用 .data() 将此超时本地存储在元素上就像我上面所说的那样,更少的全局变量,你可以在许多元素中使用它,而不是为每个元素使用一个超时变量。

关于Javascript:setTimeout() - 需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2584329/

相关文章:

javascript - Hello World 不能在带有 jointjs 的 html 中正常工作?

javascript - 用javascript调用jquery函数

javascript - 为什么Ajax和SweetAlert不显示?

javascript - jquery getJSON 调用出现问题

javascript - 匹配 JavaScript 文件,但不包括 mocha 测试文件

javascript - 使用从 react 组件中的函数返回的值(自动更新)

javascript - 需要使 html 页面响应

javascript - 删除类更改列表大小

Javascript根据值选择并更改元素的内容

javascript - 鼠标悬停不适用于第一次悬停 Angular 5