使用/多选的JQuery UI自动完成 - 删除选择

时间:2013-04-22 17:02:34

标签: jquery jquery-ui autocomplete jquery-ui-autocomplete multi-select

我正在使用带有多选的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数组中删除一个选定的选项,然后如果它未被选中则将其添加回来。

感谢您的帮助。

0 个答案:

没有答案