我是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);
};
});
答案 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/),它似乎工作正常。
希望它有所帮助!