1

我有一个自动完成功能,但是当我键入文本进行搜索并将鼠标移到自动完成的结果上时,自动完成中的文本会更改为上一个(删除)。有谁知道如何改善这种行为。

我在 jQuery.com 上阅读

焦点类型:自动完成焦点

在焦点移动到一个项目(不是选择)之前, ui.item 指的是焦点项目。焦点的默认操作是将文本字段的值替换为焦点项的值,但前提是焦点事件是由键盘交互触发的。取消此事件会阻止更新值,但不会阻止菜单项获得焦点。

但我不知道如何取消焦点事件。

4

5 回答 5

3

正如您在问题中所述,可以取消 jQuery Autocomplete 上的焦点事件。Focus是一个函数,它的第一个参数是一个jQuery Event对象。根据事件文档:

事件

...它将目标、relatedTarget、metaKey 和 pageX/Y 属性标准化,并提供 stopPropagation() 和 preventDefault() 方法。

然后,您可以preventDefault()像这样使用该方法:

$( ".selector" ).autocomplete({
  focus: function( event, ui ) {
    event.preventDefault();
  }
});
于 2015-11-26T00:04:58.533 回答
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 行中删除焦点选项。

于 2012-07-19T12:12:12.447 回答
1

你是对的,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!

于 2012-07-20T05:52:38.577 回答
0

通过调用event.preventDefault()来取消事件(并非所有事件都可以取消,检查event.cancelable)。 https://developer.mozilla.org/en/DOM/event.preventDefault

于 2012-07-19T11:54:48.307 回答
0

这会将值设置为输入,移除焦点

 $( "#to" ).autocomplete({
    source: availableTags,
    select: function (event, ui) {
    $( "#to" ).val( ui.item.label );
        $('#to').blur();
       return false ;
    }
});
于 2016-08-28T15:40:59.833 回答