allow new values with chosen.js multiple select

后端 未结 10 1983
囚心锁ツ
囚心锁ツ 2020-12-12 19:30

I\'m using the chosen.js plugin http://harvesthq.github.com/chosen/ with jQuery to allow the user to select multiple options from a select. However, I now want to be able to

10条回答
  •  南笙
    南笙 (楼主)
    2020-12-12 19:33

    I have updated the code from 3nochroot once more. Now I have only one selector to find the multiselect input.

    $(document).ready(function() {
    $(".js-choicelist").chosen({
        //config comes here
    }).parent().find('.chosen-container .search-field input[type=text]').keydown(
        function (evt) {
            var stroke, _ref, target, list;
            // get keycode
            stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
            // If enter or tab key
            if (stroke === 9 || stroke === 13) {
                target = $(evt.target);
                // get the list of current options
                chosenList = target.parents('.chosen-container').find('.chosen-choices li.search-choice > span').map(function () { return $(this).text(); }).get();
                // get the list of matches from the existing drop-down
                matchList = target.parents('.chosen-container').find('.chosen-results li').map(function () { return $(this).text(); }).get();
                // highlighted option
                highlightedList = target.parents('.chosen-container').find('.chosen-results li.highlighted').map(function () { return $(this).text(); }).get();
                // Get the value which the user has typed in
                var newString = $.trim(target.val());
                // if the option does not exists, and the text doesn't exactly match an existing option, and there is not an option highlighted in the list
                if ($.inArray(newString,matchList) < 0 && $.inArray(newString,chosenList) < 0 && highlightedList.length == 0) {
                    // Create a new option and add it to the list (but don't make it selected)
                    var newOption = '';
                    var choiceSelect = target.parents('.select-multiple').find('select');
                    choiceSelect.prepend(newOption);
                    // trigger the update event
                    choiceSelect.trigger("chosen:updated");
                    // tell chosen to close the list box
                    choiceSelect.trigger("chosen:close");
                    return true;
                }
                // otherwise, just let the event bubble up
                return true;
            }
        }
    )
    

    })

提交回复
热议问题