Jquery ui jQueryUI自动完成不';我真的不能自动完成

Jquery ui jQueryUI自动完成不';我真的不能自动完成,jquery-ui,autocomplete,Jquery Ui,Autocomplete,我正在使用jQueryUI自动完成,但只成功地使其部分工作。实际的保存功能很好,但我似乎无法正确使用UX 如果单击一个空框,则会出现“自动完成”下拉列表,并填充每个选项。但是,如果我开始输入,下拉列表不会被过滤,它会完全消失。在这种情况下,选项列表非常小,我们正在使用这种技术来减少创建新记录时出现打字错误的可能性。例如,一个下拉列表包括两个选项:波托马克电力公司(Potomac Electric Power Co.)和弗吉尼亚电力公司(Virginia Electric&Power Co.)。几

我正在使用jQueryUI自动完成,但只成功地使其部分工作。实际的保存功能很好,但我似乎无法正确使用UX

如果单击一个空框,则会出现“自动完成”下拉列表,并填充每个选项。但是,如果我开始输入,下拉列表不会被过滤,它会完全消失。在这种情况下,选项列表非常小,我们正在使用这种技术来减少创建新记录时出现打字错误的可能性。例如,一个下拉列表包括两个选项:波托马克电力公司(Potomac Electric Power Co.)和弗吉尼亚电力公司(Virginia Electric&Power Co.)。几乎不需要大量过滤,但我希望如果有人开始键入“Poto”甚至“Poto”,列表将从2到1选项进行过滤

我可不这么想。我不得不错过一些东西,因为他们的例子和我预期的完全一样,但也许我刚刚过了看到它的阶段

      $provider_name.autocomplete({
        source: data.Utilities,
        minLength: 0,
        focus: function( event, ui ) {
          $provider_name.val( ui.item.Utility.name );
          return false;
        },
        select: function( event, ui ) {
          $provider_name.val( ui.item.Utility.name );
          $provider_id.val( ui.item.Utility.id );
          return false;
        }
      }).data( 'autocomplete' )._renderItem = function( ul, item ) {
        return $( "<li></li>" )
          .data( "item.autocomplete", item )
          .append( '<a>' + item.Utility.name + '</a>' )
          .appendTo( ul );
      };
$provider\u name.autocomplete({
资料来源:data.Utilities,
最小长度:0,
焦点:功能(事件、用户界面){
$provider_name.val(ui.item.Utility.name);
返回false;
},
选择:功能(事件、用户界面){
$provider_name.val(ui.item.Utility.name);
$provider_id.val(ui.item.Utility.id);
返回false;
}
}).data('autocomplete')。\u renderItem=函数(ul,项){
返回$(“
  • ”) .data(“item.autocomplete”,item) .append(“”+item.Utility.name+“”) .附录(ul); };

    任何意见都将不胜感激。谢谢。

    问题在于
    自动完成
    小部件希望您的数据按以下方式格式化:

    [
        { label: 'Potomac Electric Power Co.', value: '1234' },
        { label: 'Virginia Electric & Power Co.', value: '1234' }
    ]
    
    (如果名称/值相同,则只需提供value属性)

    你做这件事的方式和jQueryUI的演示做这件事的方式之间的区别在于他们没有使用像你这样的中间对象。您已经告诉小部件如何呈现每个项目,但小部件在搜索时不知道如何找到每个候选项

    我会通过使用函数对数据进行处理来解决这个问题。这将允许您将数据转换为一个更加友好的数组。比如:

    var friendly = $.map(data.Utilities, function(el) {
        return { label: el.name, value: el.id };
    });
    
    然后更改
    选择
    事件处理程序:

    select: function( event, ui ) {
        $provider_name.val( ui.item.label );
        $provider_id.val( ui.item.value );
        return false;
    }
    

    请注意,您可以在
    数组的每个对象中提供更多信息。您甚至可以在事件处理程序中访问该数据。只需确保提供
    标签
    属性。

    问题在于
    自动完成
    小部件希望您的数据按以下方式格式化:

    [
        { label: 'Potomac Electric Power Co.', value: '1234' },
        { label: 'Virginia Electric & Power Co.', value: '1234' }
    ]
    
    (如果名称/值相同,则只需提供value属性)

    你做这件事的方式和jQueryUI的演示做这件事的方式之间的区别在于他们没有使用像你这样的中间对象。您已经告诉小部件如何呈现每个项目,但小部件在搜索时不知道如何找到每个候选项

    我会通过使用函数对数据进行处理来解决这个问题。这将允许您将数据转换为一个更加友好的数组。比如:

    var friendly = $.map(data.Utilities, function(el) {
        return { label: el.name, value: el.id };
    });
    
    然后更改
    选择
    事件处理程序:

    select: function( event, ui ) {
        $provider_name.val( ui.item.label );
        $provider_id.val( ui.item.value );
        return false;
    }
    

    请注意,您可以在
    数组的每个对象中提供更多信息。您甚至可以在事件处理程序中访问该数据。只需确保提供
    标签
    属性。

    谢谢,安德鲁。一个后续问题:我应该把
    友好的
    代码放在哪里?这看起来正是我需要的,但我错过了集成图片。明白了。谢谢你的帮助,安德鲁。我会为此奋斗很长时间的。@Rob:没问题!很抱歉,我没有说得更清楚——数据操作代码应该在小部件初始化之前就存在了。谢谢,Andrew。一个后续问题:我应该把
    友好的
    代码放在哪里?这看起来正是我需要的,但我错过了集成图片。明白了。谢谢你的帮助,安德鲁。我会为此奋斗很长时间的。@Rob:没问题!抱歉,我没有说得更清楚——数据操作代码应该在小部件初始化之前就存在了。