使用select2动态预填充选项选择

时间:2019-01-02 16:29:18

标签: jquery-select2 angularjs-select2

在更改论坛字段时,我试图在select2下拉列表中动态地预先选择选项。通常,要加载预先填充有选项的select2,您可以在选项标签中添加属性“ selected ='selected'”,但是当您动态加载依赖于另一个select2下拉列表的选择的选项时,此方法将无法工作。这是使“主题”依赖于“论坛”的代码

function showForumTopics(forum){
    c.forumTopics = forum.topics;
    $('.cm-widget-post .cm-select2-topic .cm-select2').select2('destroy');
    var template = $compile('<option data-ng-value="topic.id" data-ng-repeat="topic in c.forumTopics">{{topic.name}}</option>')($scope);
    $(function () {
        $.extend($.fn.select2.defaults, {
            formatSelectionTooBig: function (limit) {
                return c.data.msg.topicLimitExceededMsg;
            }
        });

        $('.cm-widget-post .cm-select2-topic select.cm-select2').html(template).select2({
            minimumResultsForSearch: 10,
            maximumSelectionSize : c.data.maxTopicLimit
        });
    });

    $('#choose_topics_div').on('keydown',function(e){
        if($('#choose_topics').val() && c.data.maxTopicLimit<=$('#choose_topics').val().length){ 
            if((e.code || e.which) != 9){
                e.preventDefault();
            }
        }
    });
    try{$scope.$digest();}catch(e){}
    if(!c.showWidgetView) {
        if(c.forumTopics && c.forumTopics.length > 0)
            $('.cm-widget-post .cm-select2-topic .cm-select2').prop("disabled", false);
        else
            $('.cm-widget-post .cm-select2-topic .cm-select2').prop("disabled", true);
    }
}


function filterForums(){
    c.filteredForums = $filter('filter')(c.flatForumList, function(forum){
        var match = false;
        angular.forEach(forum.contents_allowed, function(content){
            if(content.id == contentType && content.access.indexOf('content_write') > -1){
                match = true;
                return;
            }               
        });
        return match;
    });

    $timeout(function(){
        $('.cm-widget-post .cm-select2-forum div.cm-select2').select2('destroy');
        var template = '<option value=""></option>'+
                '<option data-ng-if="c.showForumOption(forum)" data-ng-value="forum.sys_id" ' +
                'data-ng-repeat="forum in c.filteredForums">{{forum.name}}</option>';

        $('.cm-widget-post .cm-select2-forum select.cm-select2')
            .html($compile(template)($scope)).select2({minimumResultsForSearch: 10});       
        try{
            $scope.$digest();
        } catch(err) {
            console.error(err)
        }           

        $timeout(function(){
            if(preSelectedForumId){
                $('.cm-widget-post .cm-select2-forum .cm-select2')
                    .select2('val', preSelectedForumId)
                    .prop("disabled", true);
                if(c.data.topicsEnabled)
                    showForumTopics(preSelectedForum);
            }
        });

    });
}

这是前端html代码

<div class="col-xs-12 form-group cm-select2-forum padder-t" data-ng-if="!c.forumPage">
        <label for="choose_forum" class="control-label label-text padder-b-xs">${Forum}</label>
        <select id="choose_forum" class="cm-select2 forum-width" title="${Forum}" aria-required="true">
          <option value=""></option>
        </select>
      </div>
      <div id="choose_topics_div" class="col-xs-12 form-group cm-select2-topic padder-t" data-ng-if="c.data.topicsEnabled">
        <label for="choose_topics" class="control-label label-text padder-b-xs">${Topic(s)}</label><span class="text-optional">${ (optional)}</span>
        <select id="choose_topics" class="cm-select2" multiple="multiple" title="${Topics}">
          <option value=""></option>
        </select>
        <div class="note-text">{{c.data.msg.topicNoteMsg}}</div>
      </div>

0 个答案:

没有答案