jQuery UI自动完成在输入字段中显示值而不是标签

pun*_*ish 24 jquery-ui-autocomplete

jQuery UI自动完成的一个潜在的简单问题是让我感到困惑.我的来源是

var ac = [
    {
        label: "One Thing",
        value: "One-Thing"
    },
    {
        label: "Two Thing",
        value: "Two-Thing"
    },      
]
Run Code Online (Sandbox Code Playgroud)

我正在调用小部件

$(function() {
    $( "#search" ).autocomplete({
        source: PK.getAutocompleteSource(),
        focus: function( event, ui ) {
            $("#search").val(ui.item.label);
            return false;  
        },
        select: function( event, ui ) {
            $("#search").val(ui.item.label);
            PK.render(ui.item.value);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

一切正常.当我#search输入输入字段时,匹配标签会显示在下拉列表中,当我select执行正确的搜索时.当我使用箭头键(或鼠标)在下拉列表中选择不同的项目时,小部件甚至会label#search输入字段中显示.除了,当我按下Enter键时,小部件#searchvalue而不是填充输入字段label.所以这个领域显示的是One-Thing而不是One Thing.

我怎么能纠正这个?当然,我期待的是更合理的行为,不是吗?

Kev*_*ios 45

如果你想让标签成为你的价值,那就让源头了

var ac = ["One Thing", "Two Thing"]      
Run Code Online (Sandbox Code Playgroud)

或者,selectautocompletes默认操作的方法是将value对象(如果指定)作为输入值.你也可以放入event.preventDefault()select函数,它会把标签作为值(就像你一样)

select: function( event, ui ) {
        event.preventDefault();
        $("#search").val(ui.item.label);
        PK.render(ui.item.value);
    }
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,`event.preventDefault();`做了诀窍.说真的,这应该在文档中. (10认同)
  • @dpp`焦点'回调(在原始问题中)返回false,这是在使用使用`value`而不是`label`的箭头键时跳过默认行为的另一种方法.一旦从列表中选择了一个项目,无论如何,它都会调用`select`回调,并且你想在哪里使用`preventDefault()`或`return false`来跳过默认行为 (3认同)

小智 20

如果您希望您的标签在onFocus和onSelect文本框中成为您的值,请使用以下代码:

select: function(event, ui) { 
        $('#hiddenid').val(ui.item.value); 
        event.preventDefault(); 
        $("#search").val(ui.item.label); },

focus: function(event, ui) { 
       event.preventDefault(); 
       $("#search").val(ui.item.label);}
Run Code Online (Sandbox Code Playgroud)

我错过了onFocus事件(仅设置onSelect事件).因此,该值继续显示在文本输入中.


kok*_*kai 5

我仍然遇到箭头键显示值的问题。所以我实际上发现将值和标签都分配给标签更好,然后将值放在数据的第三个属性上。例如,让我们把它放在 id 上。

var ac = [
    {
        label: "One Thing",
        value: "One Thing",
        id: "One-Thing",
    },
    {
        label: "Two Thing",
        value: "Two Thing",
        id: "Two-Thing"
    },      
]
Run Code Online (Sandbox Code Playgroud)

然后当你使用select事件时,你可以从ui中获取id:

select: function( event, ui ) {
    PK.render(ui.item.id);
}
Run Code Online (Sandbox Code Playgroud)