jquery自动完成取消焦点事件

jquery自动完成取消焦点事件,jquery,jquery-ui,jquery-autocomplete,Jquery,Jquery Ui,Jquery Autocomplete,我有一个自动完成,但当我键入文本进行搜索并将鼠标移到自动完成的结果上时,自动完成中的文本将更改为先前的删除。有人知道如何改善这种行为吗 我在jQuery.com上读到 焦点类型:自动完成焦点 在焦点移动到未选择的项目之前,ui.item指 重点项目。焦点的默认操作是替换文本 字段的值与聚焦项的值,但仅当 焦点事件由键盘交互触发。取消这个 事件阻止更新值,但不阻止 菜单项无法聚焦 但我不知道如何取消焦点事件。取消事件是通过调用event.prevent来完成的。默认情况下,无法取消所有事件,请选中

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

我在jQuery.com上读到

焦点类型:自动完成焦点

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


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

取消事件是通过调用event.prevent来完成的。默认情况下,无法取消所有事件,请选中event.cancelable。

通过调用event.prevent来取消事件。默认情况下,并非所有事件都可以取消,请选中event.cancelable。

默认情况下,jquery ui的自动完成小部件不会替换鼠标悬停时的输入文本。但如果您复制了在以下位置找到的以下代码:


这正是你得到的。如果不希望出现这种行为,只需从第4-7行中删除焦点选项。

默认情况下,jquery ui的自动完成小部件不会替换鼠标悬停时的输入文本。但如果您复制了在以下位置找到的以下代码:


这正是你得到的。如果您不希望出现这种行为,只需删除第4-7行中的“焦点”选项。

没错,jquery autocpmplete自己也有这个bug[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.valself.term来解决问题;
但这并不是一个好主意。您可以向jquery发布一个bug

你说得对,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.valself.term来解决问题;
但这并不是一个好主意。您可以向jquery发布一个bug

如您在问题中所述,可以取消关于jQuery的自动完成。焦点是一个函数,第一个参数是对象。根据活动文档:

事件 。。。 它规范化了target、relatedTarget、metaKey和pageX/Y属性,并提供了stopPropagation和preventDefault方法

然后可以使用preventDefault方法,如下所示:

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

正如您在问题中所述,可以取消jQuery上的自动完成。焦点是一个函数,第一个参数是对象。根据活动文档:

事件 。。。 它规范化了target、relatedTarget、metaKey和pageX/Y属性,并提供了stopPropagation和preventDefault方法

然后可以使用preventDefault方法,如下所示:

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

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

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

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

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

它不会替换,它会删除新键入的文本,如果您键入足够快而不暂停。我没有焦点选项,但我必须添加以防止焦点事件。这个错误可以在这里演示,它不会替换,如果您输入足够快而不停顿,它会删除新输入的文本。我没有焦点选项,但我必须添加以防止焦点事件。这个bug可以在这里演示