0

jquery multiselct プラグインを使用しています https://plugins.jquery.com/multi-select/

あるシナリオでは、いくつかのデフォルト値を選択し、それらを無効にして誰も削除できないようにする必要があります.以下は、いくつかの条件に基づいていくつかのオプションを選択した私のコードです.

  $('#members_select3').find('option').remove().end()
    $.each(response.results, function (i, item) {
                        $('#members_select3').append($('<option>', { 
                            selected: function(){
                                if (**condition comes here**){
                                        return true;
                            },
                            value: item.uid,
                            text : item.contact,
                        }));
                    });

  enable_multi_select_search('members_select3');

ドキュメントに従って、上記のコードで無効化オプションを使用すると、オプションは無効になりますが、選択されていません。これは、デフォルトで選択されているのではなく、オプションが選択可能であることを意味します。

$('#members_select3').find('option').remove().end()
$.each(response.results, function (i, item) {
    $('#members_select3').append($('<option>', { 
        selected: function(){
            if (**condition comes here**){
                    return true;
            }
        },
        value: item.uid,
        text : item.contact,
        disabled: function(){
            if (**condition comes here**){
                    return true;
            }
        }
    }));
});

enable_multi_select_search('members_select3');

プラグイン n のデフォルト機能

function enable_multi_select_search(id_){
    // refresh previous multi select box
    $('#members_select3').multiSelect("destroy");

    // create new
    $('#'+id_).multiSelect({
        selectableHeader: "<input type='text' class='form-control search-input' autocomplete='off' placeholder='search...'>",
        selectionHeader: "<input type='text' class='form-control search-input' autocomplete='off' placeholder='search...'>",
        afterInit: function (ms) {
            var that = this,
                $selectableSearch = that.$selectableUl.prev(),
                $selectionSearch = that.$selectionUl.prev(),
                selectableSearchString = '#' + that.$container.attr('id') + ' .ms-elem-selectable:not(.ms-selected)',
                selectionSearchString = '#' + that.$container.attr('id') + ' .ms-elem-selection.ms-selected';

            that.qs1 = $selectableSearch.quicksearch(selectableSearchString)
                .on('keydown', function (e) {
                    if (e.which === 40) {
                        that.$selectableUl.focus();
                        return false;
                    }
                });

            that.qs2 = $selectionSearch.quicksearch(selectionSearchString)
                .on('keydown', function (e) {
                    if (e.which == 40) {
                        that.$selectionUl.focus();
                        return false;
                    }
                });
        },
        afterSelect: function () {
            this.qs1.cache();
            this.qs2.cache();
        },
        afterDeselect: function () {
            this.qs1.cache();
            this.qs2.cache();
        }
    });
}
4

1 に答える 1

0

と を区別する必要がdisabledありreadOnlyます。

  • disabled: このオプションはデフォルトではなくても選択できません
  • readOnly: オプションの状態 (選択されているかどうか) は変更できません

私は、あなたが2番目に向かっていると思います。

編集

たぶん、次のようにプラグインを変更できます(テストされていません):

       $('#members_select3').append($('<option>', { 
                selected: function(){
                    if (**condition comes here**){
                            return true;
                    }
                },
                value: item.uid,
                text : item.contact,
                disabled: false,
                readOnly: function(){
                    if (**condition comes here**){
                            return true;
                    }
                }
            }));
        });
于 2016-01-05T15:00:25.130 に答える