Twitter Bootstrap Datepicker у модальному вікні


83

В даний час я використовую фреймворк Twitter Bootstrap, і при використанні модальних вікон я не можу перевищити елементи js для роботи, такі як datepicker або перевірка, хоча обраний та рівномірний візуалізація правильно. перегляньте моє модальне вікно нижче:

  <div class="modal hide in" id="newMember" style="display: block; " aria-hidden="false">
        <div class="modal-header">
          <button class="close" data-dismiss="modal" type="button">×</button>
          <h3>New Member Form</h3>
        </div>
        <form accept-charset="UTF-8" action="/players" class="form-horizontal" id="new_user" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="authenticity_token" type="hidden" value="KdL6cc2Vb53qeMY+PpBUS70myT4HX1uWofMUBolLea8="></div>
          <div class="modal-body">
            <div class="widget-content nopadding">
              <div class="control-group">
                <label class="control-label" for="user_role">Role</label>
                <div class="controls">
                  <select id="user_role" name="user[role]" style="display: none; " class="chzn-done"><option value="">Select member role</option>
                  <option value="1">Player</option>
                  <option value="2">Coach</option>
                  <option value="3">Parent</option>
                  <option value="4">Manager</option>
                  <option value="5">Non-player</option></select><div id="user_role_chzn" class="chzn-container chzn-container-single" style="width: 222px; "><a href="javascript:void(0)" class="chzn-single"><span>Select member role</span><div><b></b></div></a><div class="chzn-drop" style="left: -9000px; width: 220px; top: 0px; "><div class="chzn-search" style=""><input type="text" autocomplete="off" style="width: 212px; "></div><ul class="chzn-results"><li id="user_role_chzn_o_0" class="active-result result-selected" style="">Select member role</li><li id="user_role_chzn_o_1" class="active-result" style="">Player</li><li id="user_role_chzn_o_2" class="active-result" style="">Coach</li><li id="user_role_chzn_o_3" class="active-result" style="">Parent</li><li id="user_role_chzn_o_4" class="active-result" style="">Manager</li><li id="user_role_chzn_o_5" class="active-result" style="">Non-player</li></ul></div></div>
                </div>
              </div>
              <div class="control-group">
                <label class="control-label" for="user_full_name">Full name</label>
                <div class="controls">
                  <input id="user_first_name" name="user[first_name]" placeholder="First Name" size="30" type="text">
                </div>
              </div>
              <div class="control-group">
                <label class="control-label" for="user_last_name">Last name</label>
                <div class="controls">
                  <input id="user_last_name" name="user[last_name]" placeholder="Last Name" size="30" type="text">
                </div>
              </div>
              <div class="control-group">
                <label class="control-label" for="user_email">Email</label>
                <div class="controls">
                  <input id="user_email" name="user[email]" placeholder="Email Address" size="30" type="text">
                </div>
              </div>
              <div class="control-group">
                <label class="control-label" for="user_date_of_birth">Date of birth</label>
                <div class="controls">
                  <input class="datepicker" data-date-format="dd/mm/yyyy" id="user_dob" name="user[dob]" placeholder="dd/mm/yyyy" readonly="readonly" size="30" type="text">
                </div>
              </div>
              <div class="control-group">
                <label class="control-label" for="user_gender">Gender</label>
                <div class="controls">
                  <select id="user_gender" name="user[gender]" style="display: none; " class="chzn-done"><option value="">Select gender</option>
                  <option value="Male">Male</option>
                  <option value="Female">Female</option></select><div id="user_gender_chzn" class="chzn-container chzn-container-single" style="width: 222px; "><a href="javascript:void(0)" class="chzn-single"><span>Select gender</span><div><b></b></div></a><div class="chzn-drop" style="left: -9000px; width: 220px; top: 0px; "><div class="chzn-search" style=""><input type="text" autocomplete="off" style="width: 212px; "></div><ul class="chzn-results"><li id="user_gender_chzn_o_0" class="active-result result-selected" style="">Select gender</li><li id="user_gender_chzn_o_1" class="active-result" style="">Male</li><li id="user_gender_chzn_o_2" class="active-result" style="">Female</li></ul></div></div>
                </div>
              </div>
              <div class="control-group">
                <label class="control-label" for="user_team">Team</label>
                <div class="controls">
                  <select id="user_team_id" name="user[team_id]" style="display: none; " class="chzn-done"><option value="">None</option>
                  <option value="4">Metro 3 East</option>
                  <option value="1">State League 3</option>
                  <option value="2">State League 4</option>
                  <option value="3">Metro 3 South</option>
                  <option value="5">Pennant E</option>
                  <option value="6">Under 9 White</option>
                  <option value="7">Under 9 Navy</option>
                  <option value="8">Under 13 Pennant South East</option>
                  <option value="9">Under 17 Pennant South East</option>
                  <option value="10">Under 15 South (1)</option>
                  <option value="11">Under 11 Pennant South East</option>
                  <option value="12">Under 11 South</option></select><div id="user_team_id_chzn" class="chzn-container chzn-container-single" style="width: 222px; "><a href="javascript:void(0)" class="chzn-single"><span>None</span><div><b></b></div></a><div class="chzn-drop" style="left: -9000px; width: 220px; top: 0px; "><div class="chzn-search" style=""><input type="text" autocomplete="off" style="width: 212px; "></div><ul class="chzn-results"><li id="user_team_id_chzn_o_0" class="active-result result-selected" style="">None</li><li id="user_team_id_chzn_o_1" class="active-result" style="">Metro 3 East</li><li id="user_team_id_chzn_o_2" class="active-result" style="">State League 3</li><li id="user_team_id_chzn_o_3" class="active-result" style="">State League 4</li><li id="user_team_id_chzn_o_4" class="active-result" style="">Metro 3 South</li><li id="user_team_id_chzn_o_5" class="active-result" style="">Pennant E</li><li id="user_team_id_chzn_o_6" class="active-result" style="">Under 9 White</li><li id="user_team_id_chzn_o_7" class="active-result" style="">Under 9 Navy</li><li id="user_team_id_chzn_o_8" class="active-result" style="">Under 13 Pennant South East</li><li id="user_team_id_chzn_o_9" class="active-result" style="">Under 17 Pennant South East</li><li id="user_team_id_chzn_o_10" class="active-result" style="">Under 15 South (1)</li><li id="user_team_id_chzn_o_11" class="active-result" style="">Under 11 Pennant South East</li><li id="user_team_id_chzn_o_12" class="active-result" style="">Under 11 South</li></ul></div></div>
                </div>
              </div>
              <div class="control-group">
                <label class="control-label" for="user_mobile">Mobile</label>
                <div class="controls">
                  <input id="user_mobile" maxlength="10" name="user[mobile]" placeholder="i.e 0421813529" size="10" type="tel">
                  <span class="help-block">
                    <input name="user[private_mobile]" type="hidden" value="0"><div class="checker" id="uniform-user_private_mobile"><span><div class="checker" id="uniform-user_private_mobile"><span><input id="user_private_mobile" name="user[private_mobile]" type="checkbox" value="1" style="opacity: 0; "></span></div></span></div>
                    <a href="javascript:void(0)" class="tip-bottom" data-original-title="Normally, all members of the team can see this information. If you don't want teammates to see this information, just click this checkbox. (Note: Team managers will always see this information.)">Private</a>
                  </span>
                </div>
              </div>
              <div class="control-group">
                <label class="control-label" for="user_manager_access">Manager access</label>
                <div class="controls">
                  <input name="user[manager]" type="hidden" value="0"><div class="checker" id="uniform-user_manager"><span><div class="checker" id="uniform-user_manager"><span><input id="user_manager" name="user[manager]" type="checkbox" value="1" style="opacity: 0; "></span></div></span></div>
                </div>
              </div>
              <div class="control-group">
                <label class="control-label" for="user_admin_access">Admin access</label>
                <div class="controls">
                  <input name="user[admin]" type="hidden" value="0"><div class="checker" id="uniform-user_admin"><span><div class="checker" id="uniform-user_admin"><span><input id="user_admin" name="user[admin]" type="checkbox" value="1" style="opacity: 0; "></span></div></span></div>
                </div>
              </div>
            </div>
          </div>
          <div class="modal-footer">
            <div class="pull-right">
              <input class="btn btn-primary" name="commit" type="submit" value="Create User">
              <a class="btn btn-danger" data-dismiss="modal" href="#">Cancel</a>
            </div>
          </div>
        </form>
      </div>

1
Чи можете ви помістити свій код у jsFiddle ? Це полегшить людям тестування.
Сара

У вас не виникло жодної проблеми з тим, щоб ці різні плагіни JQuery та фреймворки JavaScript працювали разом: jsfiddle.net/mccannf/xekuW/9
mccannf,

@Sara ось jsfiddle jsfiddle.net/h7cMa
Boss

@mccannf, після невеликого дослідження моєї проблеми, здається, причиною проблеми є css. коли вікно завантажено, z-index, я вважаю, що він є, не дозволяє відображати підказки або підбірку дат
Boss Nass

1
@ Paul'Whippet'McGuane, я рекомендую вам поглянути на ваш завантажувальний CSS та JS. Для вашого модального режиму встановлено дуже високе значення z-індексу (99999). Просто порівняйте мій jsfiddle вище з вашим.
mccannf

Відповіді:


243

додати z-індекс вище 1051 у класі datepicker

додати щось подібне до сторінки або css

<style>
.datepicker{z-index:1151 !important;}
</style>

1
Працює, однак, якщо я закриваю модальний і знову відкриваю, це видає помилку.
Jnanaranjan

Минуло багато часу, і я вже про це забув. Вибачте!
Jnanaranjan

@Sujaysreedhar просто запитання: чому індекс 1151? Я змінив його на 1000000, тоді він все ще працював, але цього разу він показав лише додатковий лівий верхній кут, коли сценарій запускається
smoothumut

Це не має значення, поки воно вище 1150, оскільки z-індекс модального вікна дорівнює 1150 .. z-index визначає, який шар показувати зверху, до тих пір, поки його вище, у випадку 1000000, він буде працювати
Sujay sreedhar

4
Якщо ви використовуєте bootstrap-datetimepicker.js правильним селектором є.ui-datepicker
Джим Сміт

60

для мене це працювало лише з! важливим у css

.datepicker {z-index: 1151 !important;}

7
Це працює для мене лише з! Важливо, якщо його додати у файл css. Однак, якщо ви вкладете стиль безпосередньо в заголовок сторінки, він, здається, чудово працює, не додаючи! Важливо, але це не чудово, якщо датапікер буде використовуватися на різних сторінках.
пухирчастий

Ідеально! Я додав його в datepicker.css і працює як шарм
javaboygo

11

Я використовую:

body.modal-open .datepicker {
    z-index: 1200 !important;
}

Таким чином: якщо модальний режим не відкритий, і ви хочете, щоб програма вибору дати мала нормальний z-індекс (у моєму випадку мені потрібно було, щоб він знаходився в розкривному меню, яке має z-індекс 1000), це працює.

Якщо модальний є відкритою, DatePicker повинен бути більш модальное Z-індекс (1040 або 1050), тому використовувати body.modal-openселектор.

Я використовую Bootstrap 3.1.1


8

Відповідно до http://www.daterangepicker.com/ (варіанти)

$('#dispatch_modal').on('shown.bs.modal', function() {
     $('input:text:visible:first').focus();
     // prepare datepicker
     $('.form_datepicker').daterangepicker({
          singleDatePicker: true,
          showDropdowns: true,
          parentEl: '#dispatch_modal'   
     });
});

`

parentEl вирішив мою проблему ...


7

Додайте z-indez до класу ui-datepicker

<style>
    .ui-datepicker{ z-index:1151 !important; }
</style>

6

Як сказав mccannf у своєму коментарі :

Я рекомендую вам переглянути ваш CSS та JS. Для вашого модального рівня встановлено дуже високе значення z-індексу (99999). Просто порівняйте мій jsfiddle вище з вашим


4

Спробуйте скористатися цим фрагментом коду.

.ui-datepicker{ z-index:1151 !important; }

вирішить проблему, коли ви використовуєте bootstrap V3


1
.ui-datepickerпрацював у мене там, де .datepickerні.
Тім Людвінський

3

Я думаю, що краще змінити логічну функцію в плагіні. Навколо рядка 552 я змінюю це:

            var zIndex = parseInt(this.element.parents().filter(function(){
                return $(this).css('z-index') !== 'auto';
            }).first().css('z-index'))+10;

в це:

            var zIndex = parseInt(this.element.parents().filter(function(){
                return $(this).css('z-index') !== 'auto';
            }).first().css('z-index')) + 10 * 1000; //think is enought

3

У мене була ця помилка, тому що я прокрутив знизу. Datepicker зафіксував неправильну верхню позицію. Я просто використовую його зараз, як:

$('#myModal').on('show.bs.modal', function (e) {
            $(document).scrollTop(0);
});

і зараз працює нормально.


Це спрацювало для мене як тимчасове рішення. Дуже дякую. Але я хотів би знайти остаточне рішення, щоб зробити так, щоб мій датчик відображався правильно, незалежно від позиції прокрутки. Я спробую знайти його пізніше. Ще раз дякую вам!!
Geziel Carvalho

1

Ви можете змінити свій файл CSS bootstrap-timepicker/css/bootstrap-timepicker.css

від

.bootstrap-timepicker-widget.dropdown-menu.open {
  display: inline-block;
}

до

.bootstrap-timepicker-widget.dropdown-menu.open {
  display: inline-block;
  z-index:1151;
}

1

якщо ви використовуєте bootstrap V3, спробуйте це.


    .bootstrap-datetimepicker-widget 
    {
        z-index: 1200   !important;
    }


1

Для обгортання Bootstrap 3.x та Ace Template

Datepicker і Timepicker в модалі

<style>
    body.modal-open .datepicker {
        z-index: 1050 !important;
    }
    body.modal-open .bootstrap-timepicker-widget {
        z-index: 1050 !important;
    }
</style>

1
$('#effective_to').datepicker({
    dateFormat: "dd-mm-yyyy",
    changeMonth: true,
    changeYear: true,
    beforeShow: function() { 
        $('#ui-datepicker-div').addClass('datepicker');
    }
});

CSS

.datepicker {
    z-index: 100000 !important;
    display: block;
}

Це працює у мене. Незважаючи на те, що я зателефонував моделі через ajax


1

Ці рішення ідеально працювали для мене, щоб надати датапікер поверх модального bootstrap.

http://jsfiddle.net/cmpgtuwy/654/

HTML

<br/>
<div class="wrapper">
Some content goes here<br />
Some more content.
<div class="row">
<div class="col-xs-4">

<!-- padding for jsfiddle -->
<div class="input-group date" id="dtp">
<input type="text" class="form-control" />  
<span class="input-group-addon">
  <span class="glyphicon-calendar glyphicon"></span>
</span>
</div>
</div>
</div>
</div>

Javascript

$('#dtp').datetimepicker({
format: 'MMM D, YYYY',
widgetParent: 'body'});


$('#dtp').on('dp.show', function() {
      var datepicker = $('body').find('.bootstrap-datetimepicker-widget:last');
      if (datepicker.hasClass('bottom')) {
        var top = $(this).offset().top + $(this).outerHeight();
        var left = $(this).offset().left;
        datepicker.css({
          'top': top + 'px',
          'bottom': 'auto',
          'left': left + 'px'
        });
      }
      else if (datepicker.hasClass('top')) {
        var top = $(this).offset().top - datepicker.outerHeight();
        var left = $(this).offset().left;
        datepicker.css({
          'top': top + 'px',
          'bottom': 'auto',
          'left': left + 'px'
        });
      }
    });

CSS

.wrapper {
height: 100px;
overflow: auto;}
body {
position: relative;
}

Це для bootstrap-datetimepicker, але все ще корисно.
Бен Треверн,


0

Для календаря BootsTrap використовуйте це

/ Індекс календаря CSS /

.bootstrap-datetimepicker-widget {
   z-index:99999 !important;
}

0

спробуйте використати цей код, він працює для мене. до речі це прийшло з цього веб- сайту https://github.com/eternicode/bootstrap-datepicker/issues/464 .

$('#datepicker').datepicker().on('show', function () {
                var modal = $('#datepicker').closest('.modal');
                var datePicker = $('body').find('.datepicker');
                if (!modal.length) {
                    $(datePicker).css('z-index', 'auto');
                    return;
                }
                var zIndexModal = $(modal).css('z-index');
                $(datePicker).css('z-index', zIndexModal + 1);
            });

0

Fwiw. Некро, але все-таки.

для <link href="https://cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.min.css" rel="stylesheet">

мені було потрібно

<style type="text/css">
.ui-timepicker-container {z-index: 1151 !important;}
</style>    

в ГОЛОВІ документа, щоб він прийняв заміну

Я спробував тут майже кожне інше рішення, перш ніж вдатися до цього.


0
// re initialze datepicker
$(".bootstrap-datepicker").bsdatepicker({
    format: "yyyy-mm-dd",
    autoclose: true,
}).on('changeDate', function (ev) {
    $(this).bsdatepicker('hide');
});
//
$(".dropdown-menu").css({'z-index':'1100'});

2
Дякуємо за цей фрагмент коду, який може надати обмежену негайну допомогу. Належне пояснення буде значно поліпшити свою довгострокову цінність, показуючи , чому це є хорошим рішенням проблеми і зробить його більш корисним для читачів майбутніх з іншими подібними питаннями. Будь ласка, відредагуйте свою відповідь, щоб додати пояснення, включаючи припущення, які ви зробили.
Козеріг


-1

Дозвольте мені допомогти вам,

Ви можете оновити bootstrap.min.css

у випадаючому меню класу ви можете змінити значення z-індексу на 2000

отже, з'явиться datepicker


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.