【发布时间】:2013-05-31 01:08:07
【问题描述】:
我正在尝试修改 jQuery's autocomplete widget 以在脚本搜索建议时更改输入的背景颜色。这是我的尝试(或看看my attempt on jsfiddle):
html
<label for="numbers">Numbers: </label>
<input id="numbers" />
javascript
var numbers = [],
nb = 10000,
i;
for (i = 0; i < nb; i += 1) {
numbers.push(i.toString());
}
function color (color) {
$('#numbers').css({
background: color
});
}
$("#numbers").autocomplete({
source: numbers,
search: function (event, ui) {
console.log('search event fired');
color("red");
},
open: function (event, ui) {
console.log('open event fired');
color("green");
},
close: function (event, ui) {
console.log('close event fired');
color("white");
}
});
如您所见,我正在记录 search、open 和 close 事件,以便查看它们何时被触发。
正如预期的那样,输入5(现有值)会触发search 事件并记录相应的消息,几秒钟后,会触发open 事件并记录其相应的消息。由于我在其中放置了 10000 个条目,因此 search 事件和 open 事件之间存在明显的延迟(大约 1 秒)。
让我感到困惑的是,当与search 事件相关联的日志消息出现时,并没有按照预期将背景颜色变为红色。相反,在open 事件发生之前它会保持白色,然后变为绿色(正如在打开事件之后所预期的那样)。但是,如果我输入a(一个不存在的值),背景颜色会毫无问题地变为红色(请注意,在这种情况下,open 事件永远不会发生,因为没有找到相应的值)。这里发生了什么?
出于好奇,我最终会尝试在搜索过程中显示一个小loading 图标(我很惊讶的一个功能并未随开箱即用的小部件提供)。背景颜色的改变是朝着这个方向迈出的第一步。
更新
我做了another attempt,这表明console.log后面的指令确实被调用了,但是视觉效果只是在很久以后才出现。这是我正在使用的代码:
$("#numbers").autocomplete({
source: numbers,
search: function (event, ui) {
console.log('search event fired');
$('#numbers').css({
marginTop: "5em"
});
console.log('search callback done');
}
});
如果您尝试一下,您会发现在字段被添加上边距取代之前,两条消息都已记录。不知何故,边距是在正确的时间添加的,但页面并没有在正确的时间重绘......
【问题讨论】:
-
@user1477388 这些链接都没有被证明是有用的。这是你的想法吗? jsfiddle.net/Shawn/FTP8s
-
请看下面我的回答
标签: javascript combobox jquery-ui-autocomplete