我有一个自动完成,但是当我输入文本搜索并将鼠标移动到自动完成的结果上时,自动完成中的文本更改为上一个(删除)。有谁知道如何改善这种行为。jquery autocomplete取消焦点事件
我jQuery.com
重点类型阅读:autocompletefocus
焦点前移到项目(不选择),ui.item指 关注项目。焦点的默认操作是将焦点项目的值替换为文本 字段的值,但前提是焦点事件是由键盘交互触发的。取消此 事件可防止更新值,但不会阻止 菜单项被集中。
但我不知道如何取消焦点事件。
我有一个自动完成,但是当我输入文本搜索并将鼠标移动到自动完成的结果上时,自动完成中的文本更改为上一个(删除)。有谁知道如何改善这种行为。jquery autocomplete取消焦点事件
我jQuery.com
重点类型阅读:autocompletefocus
焦点前移到项目(不选择),ui.item指 关注项目。焦点的默认操作是将焦点项目的值替换为文本 字段的值,但前提是焦点事件是由键盘交互触发的。取消此 事件可防止更新值,但不会阻止 菜单项被集中。
但我不知道如何取消焦点事件。
你说得对,jquery autocpmplete在他们自己的[demo page] [1]上有这个bug。
如果您键入了一些文本并且自动填充显示了一些答案,您可以获取它;然后你添加一些额外的文本,同时你徘徊在答案之一,程序会削减你的额外文本。
可以在自动完成构件
blur: function (event, ui) {
// don't set the value of the text field if it's already correct
// this prevents moving the cursor unnecessarily
if (self.menu.element.is(":visible") && (self.element.val() !== self.term)){
self.element.val(self.term);
}
}
查看源代码,你可以通过注释掉此行self.element.val(self.term);
弄清楚你的问题,但这个是不是真的好主意。你可以发布bug到jquery!
取消事件是通过调用event.preventDefault()
(并非所有事件都可以取消,检查event.cancelable
)完成的。 https://developer.mozilla.org/en/DOM/event.preventDefault
默认情况下,jquery-ui的自动完成小部件不会替换鼠标悬停时的输入文本。但是,如果您复制在http://jqueryui.com/demos/autocomplete/#custom-data发现的以下代码:
1 $("#project").autocomplete({
2 minLength: 0,
3 source: projects,
4 focus: function(event, ui) {
5 $("#project").val(ui.item.label);
6 return false;
7 },
这正是您所得到的。如果您不想要这种行为,只需从第4-7行删除焦点选项即可。
一点也没有” t取代,它会删除新输入的文本(如果您输入的速度足够快而没有暂停)。我没有焦点选项,但我必须添加以防止焦点事件。这个bug可以在这里演示http://jqueryui.com/demos/autocomplete/ – Rinat 2012-07-20 03:54:49
正如你在你的问题中所述,关于jQuery Autocomplete的focus event可以被取消。焦点是一个函数,其中第一个参数是jQuery Event对象。按照事件文档:
事件... 它归一化目标,relatedTarget,其中,metaKey和pageX属性/ Y性质和同时提供stopPropagation()和preventDefault()方法的方法。
然后,您可以使用preventDefault()
方法像这样:
$(".selector").autocomplete({
focus: function(event, ui) {
event.preventDefault();
}
});
这将值设置为输入,删除焦点
$("#to").autocomplete({
source: availableTags,
select: function (event, ui) {
$("#to").val(ui.item.label);
$('#to').blur();
return false ;
}
});
感谢,我会检查出来 – Rinat 2012-07-20 03:50:46