我正在使用带有多选功能的 JQuery Auto-Complete 小部件,如以下小提琴所示:http: //jsfiddle.net/Z26yv/。
这是代码:
<label>Teams:</label>
<input type="text" id="teams" />
<br />
<br />
<label>Team IDs:</label>
<input id="team_ids" />
$(function() {
var availableTags = [
{label: "Choice1", value: "Choice1", db: 1},
{label: "Choice2", value: "Choice2", db: 2},
{label: "Choice3", value: "Choice3", db: 3},
{label: "Choice4", value: "Choice4", db: 4},
{label: "Choice5", value: "Choice5", db: 5},
{label: "Choice6", value: "Choice6", db: 6},
{label: "different text", value: "different text", db: 7},
];
function split(val) {
return val.split(/,\s*/);
}
function extractLast(term) {
return split(term).pop();
}
$("#teams")
//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) {
//delegate back to autocomplete, but extract the last term
response($.ui.autocomplete.filter(availableTags, extractLast(request.term)));
},
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(", ");
$('#team_ids').val($('#team_ids').val() + "," + ui.item.db);
return false;
}
});
});
这个想法是用户将进行一个或多个选择,并且每次将所选项目的 ID 添加到(隐藏)字段中。我遇到的问题是如果他们删除选择会发生什么?由于它是一个文本框,因此用户只需退格/删除一个团队,并且自动完成中似乎没有事件可以捕捉到这一点。JQueryUI 自动完成 API 在这里:http ://api.jqueryui.com/autocomplete/
也许我需要利用更改事件,并以某种方式提取当前选定值的 ID?我不完全确定该怎么做。
另外,关于从搜索中删除选定选项的任何想法?我想我必须从 availableTags 数组中删除一个选定的选项,然后如果它未被选中,则将其添加回来。
谢谢您的帮助。