我正在使用带有多选的JQuery自动完成小部件,如此小提琴所示: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数组中删除一个选定的选项,然后如果它未被选中则将其添加回来。
感谢您的帮助。