JQuery Select2 не отображается должным образом в модальном диалоговом окне загрузочного окна

Когда я использую JQuery Select2 на странице, он работает нормально. Однако, когда он находится внутри модального диалогового окна загрузочного окна, он отображается неправильно.

введите здесь описание изображения

Вот код jquery, который я использую...

$.ajax({
        type: 'GET',
        url: src,
        success: function (data) {
            if (allowed) {
                bootbox.dialog({
                    title: dialogTitle,
                    message: $('#altForm'),
                    onEscape: true,
                    show: false // We will show it manually later
                }).on('shown.bs.modal', function () {
                    $('#enterBtn').hide();
                    $('#userPwd').hide();
                    $('.app-ctrl').prop('disabled', true);
                    $('#altForm').show();
                }).on('hide.bs.modal', function (e) {
                    $('#altForm').hide().appendTo('body');
                }).modal('show');
                $('.boop').parents('.bootbox').removeAttr('tabindex');
                $('.boop').select2();
            }
        }
    });

Я считаю, что код для раскрывающегося списка Select2 работает, потому что, когда я комментирую строку инициализации: $('.boop').select2(); раскрывающийся список выбора превращается в обычный раскрывающийся список. Но я не знаю, почему он не отображается правильно.


person Keith Harris    schedule 22.02.2017    source источник
comment
перезаписать forceFocus(), который регистрирует событие в модальном окне. $.fn.modal.Constructor.prototype.enforceFocus = function() {};   -  person Mannan Bahelim    schedule 22.02.2017
comment
Это решение не сработало. Однако, когда я скопировал файлы .css внутри формы, это сработало! Почему это необходимо?   -  person Keith Harris    schedule 22.02.2017
comment
Select2 нуждается в том, чтобы элементы, к которым он применяется, были видны. Вам нужно переместить $('.boop').select2(); внутрь обработчика события shown.bs.modal (shown, а не show — show обрабатывается непосредственно перед тем, как модальное окно становится видимым).   -  person Tieson T.    schedule 23.02.2017
comment
Проблема НЕ в $('.boop').select2(); это работает как внутри, так и снаружи показанного .bs.modal. Настоящая проблема заключается в невозможности просмотра файлов CSS select2. Когда я включаю его в форму, он работает! Я не знаю, почему он не может прочитать это из раздела ‹head› страницы.   -  person Keith Harris    schedule 23.02.2017


Ответы (4)


У меня была такая же ситуация некоторое время назад, и мне удалось решить ее с помощью этого:

dialog.on('shown.bs.modal', function() {
  dialog.removeAttr("tabindex");
});

где dialog - мой модальный диалог загрузчика. Вам просто нужно удалить атрибут tabindex из самого диалога. Таким образом, он будет работать так, как ожидалось (как на обычной странице).

person Ahmet    schedule 05.03.2017
comment
это должен быть ответ. Спасибо! - person Braian Mellor; 11.05.2018
comment
Спасибо. Это помогло select2 начать регистрацию нажатий клавиш. - person miCRoSCoPiC_eaRthLinG; 24.01.2019

Я просто буду работать, если вы инициализируете свой компонент select2 методом «show.bs.modal»:

bootbox.dialog({
                title: dialogTitle,
                message: $('#altForm'),
                onEscape: true,
                show: false // We will show it manually later
            }).on('shown.bs.modal', function () {
                $('.boop').select2(); <---- Place it in here!!!
                $('#enterBtn').hide();
                $('#userPwd').hide();
                $('.app-ctrl').prop('disabled', true);
                $('#altForm').show();
            }).on('hide.bs.modal', function (e) {
                $('#altForm').hide().appendTo('body');
            }).modal('show');
            $('.boop').parents('.bootbox').removeAttr('tabindex');
person parismiguel    schedule 31.03.2018
comment
Спасибо - это помогло правильно инициализировать select2. И ответ прямо ниже помог решить проблему с регистрацией нажатий клавиш. - person miCRoSCoPiC_eaRthLinG; 24.01.2019

У меня была такая же ошибка, это было решение для моего

  on('shown.bs.modal', function() {
    $('#estacion').select2({ //includ the function select 2 on show modal
      width: "100%",//i put width 100% to show in all the modal
      dropdownParent: $('#sistemas')//this is the solucion to show the select options, my select2 is inside a table whit id sistamas 
     });
  })

Весь код

  $("#idbutton").on("click", function(e) {
   let url = $("#base_url").val() + "example/example/urlBootbox";
   $.get(url, {}, function(data) {

  modalPrenomina = bootbox.confirm({
    title: "Registrar Prenomina",
    message: $(data),
    size: "middle",
    show: false,
    buttons: {
      confirm: {
        label: '<span class="glyphicon glyphicon-floppy-saved" ></span> Guardar',
        className: 'btn-sm btn-primary btn-sm'
      },
      cancel: {
        label: '<span class="glyphicon glyphicon-remove" style="margin-right:5%;"></span> Cancelar',
        className: 'btn-sm btn-default btn-sm'
      }
    },
    callback: function(result) {

      if (result) {
        $("#frmPrenomina").submit();
        return false;
      }
    }
  }).on('shown.bs.modal', function() {
 
    $('#estacion').select2({
      width: "100%",
      dropdownParent: $('#sistemas')
     });
    



  }).on('hide.bs.modal', function(e) {

  }).modal('show');
})
})

HTML-код

    <table class="table table-striped tooltip-demo" id="sistemas" style="margin-bottom: 0px;">
        <tbody>
            <div class="col-sm-12">
                <h3 class="m-t-none m-b"></h3>
                <div class="row">
                    <div class="col-lg-12 col-md-12 col-sm-12">
                        <div class=" form-group  "><label class="col-sm-12 col-form-label">Empresa *</label>
                            <div class="col-sm-12">
                                <div class="inputGroupContainerfrm inputGroupContainer">
                                    <div class="input-group" id="divSelectE">
                                        <span class="input-group-addon" id="style_spam_empresa"><i class="fa fa-building"></i></span>
                                        <select class="chosen-select" id="estacion" name="estacion"  onChange="myChangeEstacion(this);">
                                            <option value="" disabled selected>Elige una opción</option>
                                            <?php foreach ($estaciones as $item) : ?>
                                                <option value="<?php echo $item->id ?>"><?php echo $item->alias ?></option>
                                            <?php endforeach;  ?>
                                        </select>
                                    </div>
                                </div>
                                <br>
                            </div>
                        </div>
                    </div>
                    <!--
                        Nota: Se va descomentar esta linea cuando se implemente lo de los departamentos
                              y se va incluir esta linea dentro de la etiqueta select onChange="revisarDocumento(this);" y se va quitar onChange="myChangeEstacion(this);"
                         <div class="depa" id="depa">
                    </div> -->
                </div>
        </tbody>
    </table>
person Israel Martínez González    schedule 12.04.2021

person    schedule
comment
Пожалуйста, дайте краткое описание того, что вы сделали особенного. - person Farhana Naaz Ansari; 09.10.2018
comment
Пожалуйста, не публикуйте ответ только с кодом, включите объяснение и справочную информацию. - person Mark Rotteveel; 09.10.2018
comment
У хорошего ответа есть лучшее объяснение Как написать хороший ответ? - person Narendra Jadhav; 09.10.2018