我有自动填充功能,但是当我键入要搜索的文本并将鼠标移到自动填充结果上时,自动填充中的文本会更改为上一个(删除)。有谁知道如何改善这种行为。
我在jQuery.com上读到
焦点类型:autocompletefocus
在焦点移动到项目(不选择)之前,ui.item指的是 重点项目。焦点的默认操作是替换文本 字段的值与焦点项的值,但仅限于 焦点事件由键盘交互触发。取消这个 事件阻止值被更新,但不会阻止 菜单项被聚焦。
但我不知道如何取消焦点事件。
答案 0 :(得分:1)
默认情况下,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行中删除焦点选项。
答案 1 :(得分:1)
你是对的,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);
找出问题所在
但这不是一个好主意。您可以将错误发布到jquery!
答案 2 :(得分:1)
正如您在问题中所述,可以取消jQuery自动填充的focus event。 Focus是一个函数,第一个参数是jQuery Event对象。根据活动文档:
事件
... 它规范化目标,relatedTarget,metaKey和pageX / Y属性,并提供stopPropagation()和preventDefault()方法。
然后您可以使用preventDefault()
方法:
$( ".selector" ).autocomplete({
focus: function( event, ui ) {
event.preventDefault();
}
});
答案 3 :(得分:0)
通过调用event.preventDefault()
取消事件(并非所有事件都可以取消,请检查event.cancelable
)。
https://developer.mozilla.org/en/DOM/event.preventDefault
答案 4 :(得分:0)
这会将值设置为输入,删除焦点
$( "#to" ).autocomplete({
source: availableTags,
select: function (event, ui) {
$( "#to" ).val( ui.item.label );
$('#to').blur();
return false ;
}
});