jquery自动完成取消焦点事件

时间:2012-07-19 11:48:00

标签: jquery jquery-ui jquery-autocomplete

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

我在jQuery.com上读到

  

焦点类型:autocompletefocus

     

在焦点移动到项目(不选择)之前,ui.item指的是   重点项目。焦点的默认操作是替换文本   字段的值与焦点项的值,但仅限于   焦点事件由键盘交互触发。取消这个   事件阻止值被更新,但不会阻止   菜单项被聚焦。

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

5 个答案:

答案 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 ;
    }
});