1

私はjQueryを初めて使用し、画像(スタックのメンバーによって作成された)を返すオートコンプリートを実装しようとしているときに問題に直面していますが、さまざまな値(複数の値)を選択する可能性があります。しかし、私のコードでは、ユーザーは1つの値しか選択できません。

これが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

問題は、コンマの後の部分( "a"など)だけでなく、テキストボックスからの完全なテキスト( "Name1、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 に答える