我的网站上有搜索输入。当用户在其中键入字母时,执行在结果中显示某些内容的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);
}
我做错了什么?或者请为此案例编写其他解决方案。
答案 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的评论。