代码之家  ›  专栏  ›  技术社区  ›  leora Matt Lacey

使用Ajax和keypress优化搜索

  •  41
  • leora Matt Lacey  · 技术社区  · 14 年前

    我想看看是否有一种方法可以检测按键之间的任何特定时间,所以只有在用户停止键入500毫秒或类似的时间时才进行搜索。

    这样的事情有没有最佳实践?

    $('#searchString').keypress(function(e) {
    
        if (e.keyCode == 13) {
    
            var url = '/Tracker/Search/' + $("#searchString").val();
            $.get(url, function(data) {
                $('div#results').html(data);
                $('#results').show();
            });
        }
        else {
    
            var existingString = $("#searchString").val();
            if (existingString.length > 2) {
                var url = '/Tracker/Search/' + existingString;
                $.get(url, function(data) {
                    $('div#results').html(data);
                    $('#results').show();
                });
            }
        }
    
    3 回复  |  直到 6 年前
        1
  •  91
  •   Nick Craver    14 年前

    $('#searchString').keyup(function(e) {
        clearTimeout($.data(this, 'timer'));
        if (e.keyCode == 13)
          search(true);
        else
          $(this).data('timer', setTimeout(search, 500));
    });
    function search(force) {
        var existingString = $("#searchString").val();
        if (!force && existingString.length < 3) return; //wasn't enter, not > 2 char
        $.get('/Tracker/Search/' + existingString, function(data) {
            $('div#results').html(data);
            $('#results').show();
        });
    }
    

    它的作用是执行搜索(在 keyup ,比 keypress 500ms 通过将计时器存储在 #searchString 元素的 .data() collection 它清除计时器,如果键是enter,则立即搜索,如果它没有设置另一个 500毫秒 自动搜索前超时。

        3
  •  1
  •   johnwards    14 年前

    我要做的是每按一次键都使用一个设置超时功能,并具有所需的延迟。因此,该函数将在超时后启动。每按一次键,然后删除计时器并设置一个新的计时器,使用clearTimeout();

    http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

        4
  •  0
  •   Jerrin stephen    5 年前

    我只想对这个问题再补充几点。

    去盎司:

    你可以通过setimeout,cleartimeout函数来实现这两个功能。

    LINK