Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery Dialog и Datepicker (https://javascript.ru/forum/jquery/1472-jquery-dialog-i-datepicker.html)

Гость 26.07.2008 13:16

jQuery Dialog и Datepicker
 
Уважаемые господа.

Помогите разобраться. Недавно начал изучать библиотеку jQuery и столкнулся с проблемой:

Создаю модальное диалоговое окно (jQuery.ui.Dialog), в которое необходимо внедрить календарь (jQuery.ui.Datepicker). Отдельно окно и календарь создаются и работают, но никак не получается их совместить. Пишу следующий код:


Код
$(document).ready(function(){
    $("#form_jQuery").dialog({
        height:480,
        width:650,
        autoOpen:true,
        modal:true,
        overlay:{opacity: 0.3,background:"gray"},
        title:"Добавление расписания",
        buttons:{"Добавить":function(){exec_form_rasp("addrasp","filter","");},"Отмена":function(){$('#form_jQuery').dialog('close');}},
        open:function(){
            $(document).ready(function(){
                $('#date_nach').datepicker({
                    showOn: 'both', 
                    buttonImageOnly: false, 
                    buttonImage: 'img/cal.gif', 
                    buttonText: 'Календарь', 
                    dateFormat: 'dd/mm/yy'});
                $('#date_okonch').datepicker({
                    showOn: 'both', 
                    buttonImageOnly: false, 
                    buttonImage: 'img/cal.gif', 
                    buttonText: 'Календарь', 
                    dateFormat: 'dd/mm/yy'});
                });
            },
        close:function(){$("#form_jQuery").dialog("destroy");}});
      });


Окошко календаря показывается под диалоговым окном и, к тому же, я его не могу использовать, поскольку оно неактивно (окно модальное)

Помогите решить проблему

Akzhan 26.07.2008 22:35

ну второй раз цепляться на ready, когда документ уже заведомо загружен, бессмысленно :)
open:function(){
                $('#date_nach').datepicker({
                    showOn: 'both', 
                    buttonImageOnly: false, 
                    buttonImage: 'img/cal.gif', 
                    buttonText: 'Календарь', 
                    dateFormat: 'dd/mm/yy'});
                $('#date_okonch').datepicker({
                    showOn: 'both', 
                    buttonImageOnly: false, 
                    buttonImage: 'img/cal.gif', 
                    buttonText: 'Календарь', 
                    dateFormat: 'dd/mm/yy'});
            },

Гость 28.07.2008 16:36

Хорошо, а как привязать эти календари в диалоговое окно? В команде вызова окна надо что-то написать

Гость 28.07.2008 16:39

Извиняюсь. не увидел сначала, что код - это правильный вариант.
Буду проверять. Спасибо

Гость 28.07.2008 16:47

К сожаению, не помогло. Окошко календаря также отображается под диалоговым модальным окном. Может есть еще какие предложения по решению проблемы?

Akzhan 29.07.2008 11:33

А поля #date_nach и #date_okonch точно расположены внутри диалогового окна?.

Также, если выплывающее окно календаря вылезет под диалогом, надо переделать таблицу стилей datepicker - добавить или изменить поле z-index для стиля календарика. Его значение должно быть больше, чем значение z-index для диалогового окна.

Nichloas 29.07.2008 13:03

Поля однозначно внутри диалогового окна. Точнее технология следующая:
1. Создается пустой div под диалоговое окно
2. В созданный div динамически прописывается экранная форма
3. Создается jQuery.dialog на данный div

Соответственно, поля для дат однозначно внутри этого div'а и попадают внутрь диалогового окна.

Akzhan 29.07.2008 13:09

Я бы проверил через Firebug...

скорее всего проблемы с z-index, если речь о попадании под окно именно диалогов календарика.

Nichloas 29.07.2008 13:25

Именно их. Попробую поиграться с z-index

Akzhan 30.07.2008 01:08

Цитата:

Сообщение от Nichloas (Сообщение 4032)
Именно их. Попробую поиграться с z-index

просто поправь таблицу стилей календарика.

Nichloas 30.07.2008 17:54

Изменил z-index у календаря и все получилось, но неужели это единственный способ. Если я ничего не напутал, то Dialog свой параметр z-index генерирует автоматически, исходя из расчетов максимального значения. Тогда получается, что для календаря необходимо устанавливать максимально возможное значение. А как же тогда быть, если диалоговые окна накладываются друг на друга? Хорошо, если они модальные с блокированием задней части окна браузера. А если - нет, тогда получится, что календарь будет выводиться поверх всех окон, что не совсем верно с точки зрения правил интерфесов.

Может есть какой-то способ указать, что календарь является дочерним элементом для диалогового окна?

Андрей Параничев 30.07.2008 18:02

А если ему вообще не ставить в стилях z-index?

Nichloas 30.07.2008 19:40

Тогда получается, что у Dialog параметр устанавливается, а календарь получает минимальный параметр.

Проверка показала, что не получается, если убрать параметр. Из Dialog параметр убрать без корректировки js убрать нельзя - он рассчитывается там

Arkad-snz 11.08.2008 23:19

У календаря: z-index: 2147483647;

ui.dialog.js:

this.activate = function() {
var maxZ = 0;
$('.ui-dialog:visible').each(function() {
maxZ = Math.max(maxZ, parseInt($(this).css("z-index"),10));
});
maxZ-=48; //Чтобы не сильно мнил себя царем горы
overlay.$el && overlay.$el.css('z-index', ++maxZ);
uiDialog.css("z-index", ++maxZ);
};

т.е. на все, что нужно поверх dialog'а останется z-index'ы с 2147483601 до ...47
М.б. накладки с чем еще, но путь ясен.

Nichloas 12.08.2008 08:42

Спасибо


Часовой пояс GMT +3, время: 10:24.