2

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

谢谢您的帮助。

4

0 回答 0