Почему bootstrap-datepicker запускает show.bs.modal при его отображении?

У меня есть модальное окно, показанное ниже,

Когда я выбираю поле ввода, содержащее средство выбора даты, запускается модальное событие начальной загрузки .on('show.bs.modal'), что очень проблематично, потому что я выполняю все виды асинхронных действий, когда модальное отображение отображается законно. . Я считаю, что модальное окно уже показано, и это событие не должно запускаться.

У меня есть слушатель в событии начальной загрузки 'show.bs.modal', как указано ниже,

  handleModalLaunch: () ->
    $(@modalClass).on 'show.bs.modal', (event) =>
      return if event.dates
      promise = new Promise ( (resolve, reject) =>
        @setModalData(event)
        if (@interactionData)
          resolve(@interactionData)
        else
          reject(false)
      )
      promise.then(
        (results) =>
          @trigger 'setRooms', @callBacks
          @trigger 'setStudentInfo', @callBacks
        (err) ->
          err
      )

И эффективно, прослушиватель запускается снова, который впоследствии вызывает обещание и связанные обратные вызовы, запуск события проблематичен, потому что, конечно, модальное окно уже показано, и я не хочу, чтобы эти обратные вызовы/обещание выполнялись.

Я добавил return if event.dates (event.dates является свойством, уникальным для события средства выбора даты), чтобы в основном сократить этот код в случае, если средство выбора даты вызвало событие модального показа, но, конечно, это хакерство, и я хотел бы лучше понять почему средство выбора даты запускает событие show. Потенциально, поскольку мой слушатель шоу даже привязан к классу модального окна, акт показа средства выбора даты, вероятно, наследует цель родительского модального окна и, вероятно, сам является модальным, т. е. отображается модальное окно (выбор даты), и поскольку средство выбора даты наследуется от родительского модального окна, событие срабатывает так, как если бы родительское модальное окно было «показано». Я совсем запутался? (На самом деле, теперь мне кажется понятнее, но все же нужно понять, как исправить.)


person John    schedule 07.05.2015    source источник
comment
Так он снова открывает модальное окно или ничего не происходит?   -  person CENT1PEDE    schedule 08.05.2015
comment
@GreenFox Я добавил несколько комментариев, чтобы, надеюсь, дать вам больше информации.   -  person John    schedule 08.05.2015


Ответы (3)


Это ошибка в библиотеке выбора даты. Вы можете отслеживать его на github здесь. Там есть обходной путь, предоставленный @kroeder

$("#my-datepicker").datepicker().on('show.bs.modal', function(event) {
    // prevent datepicker from firing bootstrap modal "show.bs.modal"
    event.stopPropagation(); 
});
person hhsadiq    schedule 03.07.2015

Попробуй это:

modal.on('show.bs.modal', function(e) {
    if (e.namespace === 'bs.modal') {
        // Your code here
    }
});
person Isaac Herrera    schedule 26.02.2018

Использовать это

$(date-picker-selector).on("show", function(e){
     e.preventDefault();
     e.stopPropagation();
}).on("hide", function(e){
     e.preventDefault();
     e.stopPropagation();
});
person GNet    schedule 18.01.2017