【问题标题】:JQuery Autocomplete Custom Display Multi-column Part 2JQuery 自动完成自定义显示多列第 2 部分
【发布时间】:2012-01-08 05:03:59
【问题描述】:

我正在尝试获得类似于以下内容的自动完成功能: Here 在 jquery ui 在他们的自定义示例中。

这将使用 ajax 调用而不是硬编码数据。我有两列希望显示(值和描述)。当用户输入它时,.val() 被传递到 ajax 页面,并提供建议。第一列将用于值。

我能够使用一个简单的单列示例返回单列,但不能返回多个值。我认为这很简单,因为它是示例代码的重新散列。感谢您的帮助。

<script>
$(document).ready(function() { 
  $('#myinputbox').autocomplete({ 
      minLength: 4, 
      source: function(request, response){             
          var ajaxparam = $('#myinputbox').val(); 
          ajaxparam = escape(ajaxparam);                                                    
          var querystring = "?term=" + ajaxparam;  
          $.ajax({
              url:      'ajax/jsonencode.php'+querystring,
              beforeSend: function(){
                alert("beforeSend");
              },
              async:    true,
              dataType: "json"
          });
      },
      focus: function ( event,ui ){     
          $( "#myinputbox" ).val( ui.item.value );
          return false;            
      },  
      select: function( event, ui ) {          
              $( "#myinputbox" ).val( ui.item.value );
              return false;
      }        

  })
  .data( "autocomplete" )._renderItem = function( ul, item ) {
          return $( "<li></li>" )
                  .data( "item.autocomplete", item )
                  .append( "<a>" + item.value + "<br>" + item.desc + "</a>" )
                  .appendTo( ul );
  };  
}); 
</script>

beforeSend 触发正常。如果我添加:

                success: function(data){
                  alert(data);
                }

...在 dataType 之后,它会正确地提醒我 [object Object]。

json 看起来像:

[
  {
      "value": "value1",
      "desc": "Description 1"
  },
  {
      "value": "value2",
      "desc": "Description 2"
  }
]

返回的 json 通过 jsonlint 的验证。

_renderItem 似乎不起作用。

任何指针或解决方案将不胜感激。

【问题讨论】:

标签: jquery json user-interface autocomplete jquery-ui-autocomplete


【解决方案1】:

在您的 $.ajax 调用中,您没有指定 success 回调:

$.ajax({
    url: 'ajax/jsonencode.php'+querystring,
    beforeSend: function(){
        alert("beforeSend");
    },
    async:    true,
    dataType: "json"
});

由于小部件希望您调用 response 函数来提供建议,因此您应该执行以下操作:

$.ajax({
    url: 'ajax/jsonencode.php'+querystring,
    beforeSend: function(){
        alert("beforeSend");
    },
    async:    true,
    dataType: "json",
    success: response
});

假设您的数据至少具有 labelvalue 属性。

【讨论】:

  • 除了标签或值之外,我还能拥有其他属性吗?我是否应该始终在 json 中同时包含标签和值?
  • @Cymbals:好问题。您可以指定label 和/或value。如果您想要在 input 中的值与自动完成下拉列表中的项目不同,请分别使 labelvalue 不同。否则,您只需要两者之一。您可以拥有任何其他想要的属性,它们将在自动完成事件处理程序中作为ui.item 的属性提供。
  • 我添加了success: response ...如上所述,但没有变化。
  • @Cymbals:您在 FireBug 或其他工具中看到响应了吗?另外,请尝试删除_renderItem 代码,看看它是否可以在没有它的情况下工作
  • 删除了 _renderItem。不用找了。 Firebug 还不能在 FF8 中工作。尝试通过 Chrome 中的开发者工具查看它。
猜你喜欢
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 2012-01-26
  • 2018-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多