故事背景.....
我想学习JQuery,同时我也在构建一个MVC ASP.NET应用程序,需要一个“边输入边搜索”的搜索功能 - 这是学习JQuery的绝佳机会!到目前为止(在stackoverflowers的帮助下),我已经成功实现了AJAX / JSON部分。现在我想评估每次按键操作并针对已创建为无序列表的JSON数组进行验证。我的目标是仅在列表中显示包含所输入内容的帐户号码。为此,我的想法是检查 keydown 事件并进行验证。目前,我只是将帐户号码的颜色更改为红色或隐藏它们,以证明我的逻辑能够工作。
到目前为止,我的JQuery代码如下....
http://jsfiddle.net/garfbradaz/JYdTU/28/
...为了方便起见....
$(document).ready(function() {
var $input = $("#livesearchinput"),
filled = false;
$.ajaxSetup({
cache: false
});
$input.keydown(function(key) {
if (!filled) {
filled = true;
$.getJSON("/gh/get/response.json//garfbradaz/MvcLiveSearch/tree/master/JSFiddleAjaxReponses/", function(JSONData) {
var $ul =
$('<ul>').attr({
id: "live-list"
}).appendTo('div#livesearchesults');
$.each(JSONData, function(i, item) {
$.each(item, function(j, val) {
$('<li>').attr({
id: "live-" + val
}).append(val).appendTo($ul);
});
});
});
}
var n = $("li:contains('" + this.value + "')").length;
if (n === 0) {
$("li").removeClass("color-change");
console.log("1. value of n equals " + n + " : " + this.value);
}
else {
$("li:contains('" + this.value + "')").addClass("color-change");
console.log("2. value of n equals " + n + " : " + this.value);
}
});
我的问题是,当我使用以下代码评估按键时,this.value 在第一次按下键时为空,然后在之后的步骤中也不正确。
});
var n = $("li:contains('" + this.value + "')").length
示例:
如果我输入100004,让我展示从Chrome控制台输出的console.log结果:
结果似乎总是比实际输入滞后一步。是keydown事件最好使用的还是我遗漏了什么东西。
像往常一样-感谢大家,祝编码愉快。