Почему средство выбора даты пользовательского интерфейса jQuery не работает в модальном диалоговом окне jQuery?

Я хочу использовать средство выбора даты пользовательского интерфейса jQuery в одном из моих текстовых входов. Это в модальном диалоге.

На самом деле, я могу вызвать средство выбора даты в обычном текстовом вводе документа, и я нормально получил свой календарь, но я не могу сделать это в диалоговом вводе модального текста (после звонка внутри модального ввода текста я ничего не получил без какой-либо ошибки JavaScript).

Это мой код для вызова средства выбора даты:

$(function() {
    $("#MytextInputID").datepicker({ dateFormat: 'dd/mm/yy' });
);

Я попытался изменить свойства Z-index css .ui-datepicker, но ничего не получил.

У вас есть советы, как решить эту проблему?

С уважением,


в my_page.html у меня есть

function openSaisieARModal()
        {
            window_select_CodeAgence = new showModalWindow('SaisieARModal', 500);
        }

И я использую этот скрипт

var showModalWindow=function(id, width)
{
    var newId=id+'Copy';
    this.id=newId;

var previousNode=document.getElementById(newId);
if(previousNode!=null)
{
    previousNode.parentNode.removeChild(previousNode);
}

var rootNode=document.getElementsByTagName('body')[0];
this.node=document.createElement("div");
rootNode.appendChild(this.node);
this.node.setAttribute('id', newId);
this.node.setAttribute('title', document.getElementById(id).getAttribute('title'));
this.node.innerHTML=document.getElementById(id).innerHTML;
if(width==null)
{
    width=400;
}
$('#'+newId).dialog({autoOpen: true, modal: true, width:width });

this.closeWindow=function()
{
    $('#'+this.id).dialog('close');
}

this.centerContent=function()
{
    this.node.style.textAlign='center';
}

this.center=function()
{
    $('#'+this.id).dialog('option', 'position', 'center');
}

}

а это модальный HTML-код в my_page.html

<div style="display:none;">
        <div id="SaisieARModal" title="DATE">
            <table class="tableFrame" cellspacing="0px" width="100%">
                <tr>
                    <td class="topLeft">

                    </td>
                    <td class="topCenter">

                    </td>
                    <td class="topRight">

                    </td>
                </tr>
                <tr>
                    <td class="middleLeft">

                    </td>
                    <td class="middleCenter">
                        <table>
                            <tr align="center">
                                <td>
                                    Date
                                </td>
                                <td>
                                    <input id="MyTextInputID" type="text"  />
                                </td>
                            </tr>
                        </table>
                    </td>
                    <td class="middleRight">

                    </td>
                </tr>
                <tr>
                    <td class="bottomLeft">

                    </td>
                    <td class="bottomCenter">

                    </td>
                    <td class="bottomRight">

                    </td>
                </tr>
            </table>
            <div>
            </div>
        </div>
</div>

person aa th    schedule 13.01.2010    source источник
comment
Я предполагаю, что вы изменили значение z-индекса на что-то довольно большое (9999)?   -  person Mark Schultheiss    schedule 13.01.2010
comment
Действительно, но также я пробовал 1000 -> 1003 без каких-либо изменений   -  person aa th    schedule 13.01.2010
comment
Вы включили код для вызова средства выбора даты, но не сказали, когда оно запущено. Я бы проверил 1) что он работает и 2) что он работает после создания модального окна и #MytextInputID существует в DOM, чтобы можно было связать средство выбора даты. В этом вам могут помочь точки останова Firebug.   -  person Brian Pan    schedule 13.01.2010
comment
Вы сказали, что нажатие дало вам ошибку javascript, можете ли вы обновить вопрос и указать, что это за ошибка?   -  person Nick Craver    schedule 14.01.2010
comment
Брайану Пэну 1) Да, код, который вызывает средство выбора даты, обычно запускается, потому что у них нет проблем при вызове обычного ввода текста (например, любой текстовый ввод, не включая мой модальный) 2) конечно, он запускается после того, как модальное окно создано, потому что средство выбора даты вызывается, когда я нажимаю текстовый ввод MytextInputID, включенный в мой модальный (поэтому я не могу вызвать средство выбора даты до создания модального окна)   -  person aa th    schedule 14.01.2010
comment
Нику Крейверу Нет ошибки JavaScript. Напротив, я сказал, что после звонка внутри модального ввода текста я ничего не получил без ошибок JavaScript. Спасибо за все   -  person aa th    schedule 14.01.2010


Ответы (8)


Я смоделировал быстрый пример, который работает. Вы пытались изменить z-индекс на ui-datepicker, но после просмотра отрендеренного кода в Firebug он выглядит так, как будто вам нужен идентификатор ui-datepicker-div. Я установил z-индекс на 9999, и он появляется поверх модального диалога.

<script type='text/javascript'> 
  $(function() {
      $("#datepicker").datepicker({ dateFormat: 'dd/mm/yy' });
  });

  function openmodal() {   
      var $dialogContent = $("#event_edit_container");       

      $dialogContent.dialog({
         modal: true,
         title: "Test",
         close: function() {},
         buttons: {
          save : function() {},
          cancel : function() {}
         }
      }).show();
      $("#ui-datepicker-div").css("z-index", "9999");   
  }
</script>

<div ><a href="javascript:openmodal();">Open modal</a></div>
<div id="event_edit_container" >
    <form>
        Date: <input type="text" id="datepicker" name="datepicker">
    </form>
</div>
person Scott Gottreu    schedule 15.01.2010
comment
эта строка $("#ui-datepicker-div").css("z-index", "9999"); помогла моей проблеме. благодаря . - person AceMark; 14.11.2012
comment
+1 - Помог мне решить мою проблему - имейте в виду, что вам может потребоваться установить небольшую задержку с помощью setTimeout() для этого .css(), если ваш средство выбора даты все еще не работает с использованием этого исправления - поскольку мой делал довольно много beforeShow: активность, а .css() выполнялся ДО создания диалогового окна. - person Bill Ortell; 12.04.2013

Если установка

#ui-datepicker-div {z-index:1003;} 

не работает, попробуй

#ui-datepicker-div {z-index:1003 !important;}
person user914796    schedule 24.02.2012
comment
Добавление !important было тем, что наконец сделало это для меня. Спасибо! - person nmg49; 08.08.2016

Инициализируйте средство выбора даты в функции open вашего модального диалогового окна, как показано ниже:

  1. Ваш элемент выбора даты:

    <input type="text" id="myDateStr"/>

  2. Вызов из функции open для инициализации средства выбора даты из диалогового окна:

    'открыть: функция () {'

        $('#myDateStr').datepicker
        ({
                              dateFormat: 'mm/dd/yy',
                              changeMonth: true,
                              changeYear: true,
                            });
        }
    

Это работало отлично без каких-либо настроек.

Нет необходимости изменять какой-либо существующий класс или стиль CSS, чтобы изменить z-индекс.

person manojR    schedule 26.07.2016

В моем случае я использовал помощник ZendX Jquery. Я добавил следующий css, чтобы исправить стиль клипа:

#ui-datepicker-div {z-index:9999; clip:auto}
person fredcallagan    schedule 16.07.2011

В jquery-ui-1.8.1.custom.css (или любой другой версии jquery ui) измените

.ui-datepicker

класс из

{ width: 17em; padding: .2em .2em 0; }

to

{ width: 17em; padding: .2em .2em 0; z-index:99999; }

Это сработало для меня, и средство выбора даты отлично работает внутри модального диалога!

person Nikolaevich Mijakovich    schedule 25.03.2011

Не могли бы вы уточнить, о каком «модальном диалоге» вы говорите. Я предполагаю, что это один:

http://docs.jquery.com/UI/Dialog

Не видя больше вашего кода, это сложно. Может быть полезно, если вы опубликуете сопроводительный HTML.

Однако следует помнить одну вещь: модальное диалоговое окно создает впечатление, что вы открываете новое окно, однако на самом деле содержимое находится в том же HTML-документе, что и остальная часть вашего содержимого. Это часто может привести к путанице при назначении идентификаторов элементов, например, могут быть указаны некоторые дубликаты.

Я также предполагаю, что вы отладили/протестировали до такой степени, что уверены, что ваш селектор работает правильно, т.е. выбирает элементы, которые вы намереваетесь

person James Wiseman    schedule 13.01.2010

enter code hereЕсли упростить (для теста)

$('#'+newId).dialog({autoOpen: true, modal: true, width:width }); 

и сделать это:

$('#SaisieARModal').dialog({autoOpen: true, modal: true, width:width }); 

модал появляется? Также вы пробовали вариант bgiframe: true?

Не уверен, что что-то из этого полностью уместно, но что-то (скорее всего) ставит средство выбора даты где-то за модальными вещами.

РЕДАКТИРОВАТЬ: Еще одна вещь, если вы измените:

$(function() { $("#MytextInputID").datepicker({ dateFormat: 'dd/mm/yy' }); });

to

    $(function() { 
       $("#MytextInputID").datepicker({ dateFormat: 'dd/mm/yy' });
       $("#MytextInputID").click(function(){alert("working");});
    });

предупреждение появляется?

person Mark Schultheiss    schedule 15.01.2010

В моем случае ниже работает лучше

$(document).on("click", ".modal-body", function () {

    $("#datepicker").datepicker({
                dateFormat: 'yy-mm-dd'

            });

});
person Gabriela Macias    schedule 20.06.2015
comment
Не могли бы вы объяснить свой ответ подробнее? Не совсем понятно, как это решает вопрос. - person SuperBiasedMan; 20.06.2015