1

我是 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);
};

});

4

1 回答 1

0

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

data: {
    filter: request.term,
    pagesize: 10
},

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

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

希望能帮助到你!

于 2013-03-12T07:25:09.683 回答