为什么bootstrap-datepicker会在显示时触发'show.bs.modal'?

时间:2015-05-07 23:18:08

标签: twitter-bootstrap bootstrap-datepicker

我有一个模态,如下图所示,

当我选择包含日期选择器的输入字段时,引导模态事件.on('show.bs.modal')被触发,这是超级问题,因为我在模态时采取各种异步操作是合法的。我认为模态已经显示,并且此事件不应该被触发。

我在bootstrap事件'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
      )

实际上,侦听器再次被触发,随后调用了promise和相关的回调,触发事件是有问题的,因为模式已经显示,我不希望这些回调/承诺被运行。

我添加了return if event.datesevent.dates是datepicker事件的唯一属性),以便在日期选择器触发模态显示事件时基本上将此代码短路,但当然,这很hacky,我想更好地理解为什么datepicker本身会触发show事件。潜在地,因为我的节目甚至听众都与模态的类相关联,显示日期选择器的行为可能继承了父模态的目标,并且可能本身就是模态,即模态(datepicker)被显示并且因为日期选择器从父模态继承,事件触发,好像它是'显示'的父模式。我完全混淆了这个吗? (实际上,我现在看起来更清楚,但仍然需要了解如何修复。)

3 个答案:

答案 0 :(得分:24)

这是日期选择器库中的错误。您可以在github here上进行跟踪。 @kroeder提供了解决方法

<?php
  $url = $_SERVER['REQUEST_URI'];
  print_r(dirname($url));
?>

答案 1 :(得分:4)

使用此

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

答案 2 :(得分:1)

试试这个:

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