我正在尝试使用jqueryui自动完成多个值,但遇到了麻烦。当我第一次开始输入名称时弹出的选项很好,但是一旦选择了这个名字,就会在列表中添加一个逗号,并且在我输入时我不再获得选项。我的代码如下。
function fillAutoComplete(friends_list) {
$('input#opponents').autocomplete({
minLength:0,
source: $.map(friendList, function(item) {
return {
label: item.name,
value: item.name,
id: item.id
}
}),
focus: function() {return false},
multiple: true,
select: function(event, ui) {
var terms = (this.value).split(/,\s*/);
terms.pop();
terms.push(ui.item.value);
terms.push("");
this.value = terms.join(", ");
var temp = $('input#oppID').val();
if(temp != "") {
$('input#oppID').val(temp + "," + ui.item.id);
} else {
$('input#oppID').val(ui.item.id);
}
return false;
}
});
}
感谢。
答案 0 :(得分:2)
我最近必须做一些非常类似的事情。
您需要以下内容:
function fillAutoComplete(friends_list) {
$('input#opponents')
.keydown(function(event) {
var menuActive = $(this).data('autocomplete').menu.active;
if (event.keyCode === $.ui.keyCode.TAB && menuActive)
event.preventDefault();
})
.autocomplete({
source: function(request, response) {
// Apply filtering to list based on last term of input.
var term = request.term.split(/[,;]\s*/).pop();
if (!term) {
response([]);
return;
}
// Process list of friends.
var list = $.map(friends_list, function(item) {
return {
label: item.name,
value: item.name,
id: item.id
}
});
// Apply filtering.
list = $.grep(list, function(item) {
return item.name.indexOf(term) === 0;
});
// Invoke jQuery callback.
response(list);
},
focus: function() {
var terms = this.value.split(/[,;]\s*/);
terms.pop();
terms.push( ui.item.value );
this.value = terms.join(', ');
return false;
},
select: function(event, ui) {
var terms = this.value.split(/[,;]\s*/);
terms.pop();
terms.push(ui.item.value);
terms.push('');
this.value = terms.join(', ');
return false;
}
});
}