使用多个值和图像实现Jquery自动完成

时间:2013-03-07 18:33:58

标签: jquery image autocomplete jquery-autocomplete multipleselection

我是jQuery的新手,在尝试实现返回图像的自动完成(由堆栈成员制作)时面临问题,但可以选择各种值(多值)。但在我的代码中,用户只能选择一个值。

这是jsfiddle:

http://jsfiddle.net/Igaojsfiddle/85SAF/

$(function() {
function split( val ) {
  return val.split( /,\s*/ );
}
function extractLast( term ) {
  return split( term ).pop();
}

$( "#tags" )
  // don't navigate away from the field on tab when selecting an item
  .bind( "keydown", function( event ) {
    if ( event.keyCode === $.ui.keyCode.TAB &&
        $( this ).data( "ui-autocomplete" ).menu.active ) {
      event.preventDefault();
    }
  })
  .autocomplete({
    minLength: 0,
     source: function (request, response) {
        $.ajax({
            url: "http://api.stackoverflow.com/1.1/users",
            data: {
                filter: request.term,
                pagesize: 10
            },
            jsonp: "jsonp",
            dataType: "jsonp",
            success: function(data) {
                response($.map(data.users, function(el, index) {
                    return {
                        value: el.display_name,
                        avatar: "http://www.gravatar.com/avatar/" +
                            el.email_hash
                    };
                }));
            }
        });
    },
    focus: function() {
      // prevent value inserted on focus
      return false;
    },
    select: function( event, ui ) {
      var terms = split( this.value );
      // remove the current input
      terms.pop();
      // add the selected item
      terms.push( ui.item.value );
      // add placeholder to get the comma-and-space at the end
      terms.push( "" );
      this.value = terms.join( ", " );
      return false;
    }
  }).data("autocomplete")._renderItem = function (ul, item) {
    return $("<li />")
        .data("item.autocomplete", item)
        .append("<a><img src='" + item.avatar + "' />" + item.value + "</a>")
        .appendTo(ul);
};

});

1 个答案:

答案 0 :(得分:0)

问题是你是从文本框中发送完整的文本作为过滤器(例如“Name1,a”),而不仅仅是逗号之后的部分(例如“a”)。您正确地发出请求(通过查看所选浏览器的开发人员工具栏中的“网络”选项卡可以看到),但您没有在查询中发送正确的数据。好像您已经开始使用http://jqueryui.com/autocomplete/#multiple中的代码副本,但您还没有使用 extractLast 方法。如果您从

更改json调用的 data 部分
data: {
    filter: request.term,
    pagesize: 10
},

data: {
    filter: extractLast(request.term),
    pagesize: 10
},

它应该工作。我已用此更新了你的jsfiddle(http://jsfiddle.net/85SAF/10/),它似乎工作正常。

希望它有所帮助!