2012-07-19 102 views
1

我有一个自动完成,但是当我输入文本搜索并将鼠标移动到自动完成的结果上时,自动完成中的文本更改为上一个(删除)。有谁知道如何改善这种行为。jquery autocomplete取消焦点事件

我jQuery.com

重点类型阅读:autocompletefocus

焦点前移到项目(不选择),ui.item指 关注项目。焦点的默认操作是将焦点项目的值替换为文本 字段的值,但前提是焦点事件是由键盘交互触发的。取消此 事件可防止更新值,但不会阻止 菜单项被集中。

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

回答

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); 弄清楚你的问题,但这个是不是真的好主意。你可以发布bug到jquery!

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行删除焦点选项即可。

+0

一点也没有” t取代,它会删除新输入的文本(如果您输入的速度足够快而没有暂停)。我没有焦点选项,但我必须添加以防止焦点事件。这个bug可以在这里演示http://jqueryui.com/demos/autocomplete/ – Rinat 2012-07-20 03:54:49

1

正如你在你的问题中所述,关于jQuery Autocomplete的focus event可以被取消。焦点是一个函数,其中第一个参数是jQuery Event对象。按照事件文档:

事件

... 它归一化目标,relatedTarget,其中,metaKey和pageX属性/ Y性质和同时提供stopPropagation()和preventDefault()方法的方法。

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

$(".selector").autocomplete({ 
    focus: function(event, ui) { 
    event.preventDefault(); 
    } 
}); 
0

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

$("#to").autocomplete({ 
    source: availableTags, 
    select: function (event, ui) { 
    $("#to").val(ui.item.label); 
     $('#to').blur(); 
     return false ; 
    } 
});