我有一个自动完成功能,但是当我键入文本进行搜索并将鼠标移到自动完成的结果上时,自动完成中的文本会更改为上一个(删除)。有谁知道如何改善这种行为。
我在 jQuery.com 上阅读
焦点类型:自动完成焦点
在焦点移动到一个项目(不是选择)之前, ui.item 指的是焦点项目。焦点的默认操作是将文本字段的值替换为焦点项的值,但前提是焦点事件是由键盘交互触发的。取消此事件会阻止更新值,但不会阻止菜单项获得焦点。
但我不知道如何取消焦点事件。
我有一个自动完成功能,但是当我键入文本进行搜索并将鼠标移到自动完成的结果上时,自动完成中的文本会更改为上一个(删除)。有谁知道如何改善这种行为。
我在 jQuery.com 上阅读
焦点类型:自动完成焦点
在焦点移动到一个项目(不是选择)之前, ui.item 指的是焦点项目。焦点的默认操作是将文本字段的值替换为焦点项的值,但前提是焦点事件是由键盘交互触发的。取消此事件会阻止更新值,但不会阻止菜单项获得焦点。
但我不知道如何取消焦点事件。
正如您在问题中所述,可以取消 jQuery Autocomplete 上的焦点事件。Focus是一个函数,它的第一个参数是一个jQuery Event对象。根据事件文档:
事件
...它将目标、relatedTarget、metaKey 和 pageX/Y 属性标准化,并提供 stopPropagation() 和 preventDefault() 方法。
然后,您可以preventDefault()
像这样使用该方法:
$( ".selector" ).autocomplete({
focus: function( event, ui ) {
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 行中删除焦点选项。
你是对的,jquery autocpmplete 在他们自己的 [demo page][1] 上有这个错误。
如果您输入了一些文本并且自动完成显示了一些答案,则可以得到它;然后您添加一些额外的文本,同时您将鼠标悬停在其中一个答案上,程序将剪切您的额外文本。
您可以在自动完成小部件中检查源代码
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!
通过调用event.preventDefault()
来取消事件(并非所有事件都可以取消,检查event.cancelable
)。
https://developer.mozilla.org/en/DOM/event.preventDefault
这会将值设置为输入,移除焦点
$( "#to" ).autocomplete({
source: availableTags,
select: function (event, ui) {
$( "#to" ).val( ui.item.label );
$('#to').blur();
return false ;
}
});