Intereting Posts
Проблема с PHPMaker Mysql Сравните различия в многомерном массиве Как получить тип содержимого файла в PHP? Настройка шаблона репозитория в MVC Форма AMP, отправленная с почтой Проблема в поддержании сеанса между двумя разными доменами на веб-сайте, выполненном в CakePHP Использование квадратных скобок в скрытых вводных полях HTML почему xpath удаляет html специальные символы? Как отформатировать дату UTC для использования указателя зоны Z (Zulu) в php? Отправлять HTTP-запрос с PHP без ожидания ответа? Чтение ошибок и имен файлов из файла log.txt Php добавляет, что SQL-инъекция по-прежнему действительна? Распаковка нагрузки в соответствии со значением другого раскрывающегося списка – без обновления страницы в PHP Уведомления IOS GCM push не получены в фоновом режиме с помощью PHP-отправителя и Swift Неожиданная ошибка при отправке значения json с использованием PHP

bootstrap twitter datepicker + modal – календарь на родительском экране вместо модального экрана

У меня есть форма ( Payment.php ), которую я показываю на модальном экране, используя twitter bootstrap. В форме у меня есть поле даты, для которого я нашел этот загрузочный плагин.

Но проблема в том, что календарь загружается на родительский экран ( Index.php ), а не в модальную форму, где это действительно необходимо.

Может кто-нибудь предложить решение этого.

Ниже приведен код, который я пробовал.

Импорт:

 <link href="css/bootstrap.css" rel="stylesheet"> <link href="css/datepicker.css" rel="stylesheet"> <script src="js/bootstrap-datepicker.js"></script> <script type="text/javascript" src="js/bootstrap.js"></script> <script type="text/javascript" src="js/jquery-1.8.0.js"></script> 

PHP:

 <div class="controls"> <input data-datepicker="datepicker" class="span3" value="2012-09-13" data-date-format="yyyy-mm-dd" id="dp2" > </div> 

JS:

 $('#dp2').datepicker(); 

Добавьте z-index в класс .datepicker и сделайте больше .modal

 .datepicker { z-index: 9999; top: 0; left: 0; padding: 4px; margin-top: 1px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } 

После нескольких тестов я могу снова подтвердить свой комментарий к ответу @ m4k: Решение z-index через файл CSS не работает в Firefox 19 и 20 на OS X. Тем не менее, Chrome работает. Я еще не тестировал его в других браузерах или ОС.

Решение, которое работает для меня, состоит в том, чтобы установить z-index через конфигурацию даты jqery-ui, как показано ниже:

 $('#datepicker').datepicker({ beforeShow: function() { $('#datepicker').css("z-index", 1051); } }); 

где z-индекс должен быть выше, чем один из модальных (в бутстрапе 2.3 модальный имеет 1050).

Еще более beforeShow решением может быть вызов метода в beforeShow который beforeShow определяет самый высокий в настоящий момент z-индекс на странице. На http://www.west-wind.com/weblog/posts/2009/Sep/12/jQuery-UI-Datepicker-and-zIndex вы найдете пример.


Обновление: автоматически установите z-index 1 выше, чем модальный

Простой пример, как определить, что z-индекс имеет базовый модальный:

 $("#datepicker").closest(".modal").css("z-index") 

Таким образом, метод beforeShow становится

 $('#datepicker').datepicker({ beforeShow: function() { var $datePicker = $("#datepicker"); var zIndexModal = $datePicker.closest(".modal").css("z-index"); $datePicker.css("z-index", zIndexModal + 1); } }); 

… это не помогло мне. Я запускаю bootstrap 2.3.2, и независимо от того, как я пытаюсь выполнить javascript, javascript bootstrap всегда будет сбрасывать z-index datepicker обратно (в моем случае) 21. Конечно, есть способ сделать это в javascript, но я найти css путь довольно чистый.

Итак, это сделал трюк:

 /* otherwise datepickers won't show in a modal dialog */ .datepicker { z-index:1051 !important; } 

Я выполнил подход beforeShow, но должен был получить самый близкий модал от ввода для вычисления z-индекса, а затем обязательно установить z-index в отдельный div, который является календарем.

 var DEFAULT_Z_INDEX = 10; $('#my-date-input') .datepicker() .on('show', function() { // Make sure that z-index is above any open modal. var $input= $(this); var modalZIndex = $input.closest('.modal').css('z-index'); var zIndex = DEFAULT_Z_INDEX; if (modalZIndex) { zIndex = parseInt(modalZIndex) + 1; } $('.datepicker').css("z-index", zIndex); }); 

HTML

  <!-- Text input--> <div class="form-group"> <label class="col-sm-2 control-label" for="textinput">Date TO</label> <div class="col-sm-10"> <input type="text" id="DateToP" name="DateToP" placeholder="Post Code" class="form-control datepicker"> </div> </div> 

CSS

 <style type="text/css"> .datepicker { z-index:1051 !important; } </style> 

JQuery

  $('#DateToP').datepicker({ format: 'yyyy-mm-dd', autoclose: true }); 

Я использовал дисплей: none; атрибут файла CSS для .datepicker. И это сработало хорошо.