如何只处理搜索功能中的最后一个keyup事件

时间:2014-07-02 11:04:38

标签: javascript jquery ajax

我的网站上有搜索输入。当用户在其中键入字母时,执行在结果中显示某些内容的ajax请求。我想要实现的是仅在用户快速写入时为最后一个keyup事件创建ajax请求。我找到了解决方案here,但它对我不起作用,我收到' TypeError:e.nodeName未定义'。这是我的代码:

var timeout;

$(function() {
  $('body').on('keyup', '.teryt-search-input', terytSearchAjax);
});

function terytSearchAjax(e) {
  clearTimeout(timeout);
  timeout = setTimeout(function() {
    if($(this).val() != '') {
      var el = $(this).parent().next('.list-group');
      el.children('.loader').removeClass('hidden');
      el.children('.content').load($(this).attr('action'), { needle: $(this).val() }, function(){
        el.children('.loader').addClass('hidden');
        el.children('.extra-content').removeClass('hidden');
      });
      timeout = null;
    }
  }, timeout ? 50 : 1);
}

我做错了什么?或者请为此案例编写其他解决方案。

1 个答案:

答案 0 :(得分:0)

我认为你的错误在于$(this)。 难道不是e.target吗?

简单示例:http://jsfiddle.net/sBb3A/

var timeout = 1000;
var timer;

$("#input").on("keyup", function(event) {
    clearTimeout(timer);
    timer = setTimeout(function() {
        Go(event.target);
    }, timeout);


});

function Go(input) {
    alert($(input).val());
}

编辑哎呀..只是阅读Hereblur的评论。