模式中的引导日期选择器不起作用

Posted

技术标签:

【中文标题】模式中的引导日期选择器不起作用【英文标题】:Bootstrap datepicker in modal not working 【发布时间】:2016-05-18 01:39:39 【问题描述】:

我已经尝试用谷歌搜索类似的问题,但到目前为止还没有找到任何东西。 我有一个问题,我从 jquery 创建并打开一个模式并尝试访问日期选择器,但是它没有激活 datepickers JS。

$("[id=add]").click(function () 
    $("#myModal .modal-header h4").html("Request for Change");
    $("#myModal .modal-body").html('<form class="form-horizontal" role="form"><br /><br /><label class="col-sm-2 control-label">Date Required</label><div class="col-sm-3"><div class="input-group date col-sm-8"><input type="text" class="form-control" id="DateRequired"><span class="input-group-addon"><i class="glyphicon glyphicon-th"></i></span></div></div></div>');
    $("#myModal").modal("show");
);

(对于较长的行长表示歉意,但是我已经尽可能多地删除了 - 现在只显示与问题相关的代码。)

我在顶部引用了这些脚本:

<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.3.0/js/bootstrap-datepicker.js"></script>
<script src="~/Scripts/jquery.tablesorter.min.js"></script>

在与上面的 jquery 函数相同的 &lt;script&gt; &lt;/script&gt; 标记中,在最顶部我有:

$('.input-group.date').datepicker(
    format: "dd/mm/yyyy",
    startDate: "01-01-2015",
    endDate: "01-01-2020",
    todayBtn: "linked",
    autoclose: true,
    todayHighlight: true
);

我以类似的方式使用此代码(除了没有 jquery 模式 - 只是在 cshtml 页面上),它可以正常工作。我不知道为什么这种方法行不通。我已经使用开发人员工具尝试跟踪问题,但没有错误 - 脚本正确加载,但是当单击所需日期时,它不会触发到日期选择器的 jquery。

我是否使用错误的 Jquery html 来创建模式?

干杯

【问题讨论】:

你需要在$("#myModal .modal-body").html(之后调用$('.input-group.date').datepicker( Twitter Bootstrap Datepicker within modal window的可能重复 【参考方案1】:

日期选择器隐藏在模态框后面。

将 datepicker 的 z-index 设置在模态的 1050 上方。

另外将您的日期选择器代码包装在引导程序的模式显示事件中。

$('#myModal').on('shown.bs.modal', function() 
  $('.input-group.date').datepicker(
    format: "dd/mm/yyyy",
    startDate: "01-01-2015",
    endDate: "01-01-2020",
    todayBtn: "linked",
    autoclose: true,
    todayHighlight: true,
    container: '#myModal modal-body'
  );
);

$("[id=add]").click(function() 
  $("#myModal .modal-header h4").html("Request for Change");
  $("#myModal .modal-body").html('<form class="form-horizontal" role="form"><br /><br /><label class="col-sm-2 control-label">Date Required</label><div class="col-sm-3"><div class="input-group date col-sm-8"><input type="text" class="form-control" id="DateRequired"><span class="input-group-addon"><i class="glyphicon glyphicon-th"></i></span></div></div></form>');
  $("#myModal").modal("show");
);
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.3.0/js/bootstrap-datepicker.js"></script>

<style>
    .datepicker 
      z-index: 1600 !important; /* has to be larger than 1050 */
    
</style>

<div class="well">
  <button type="button" id="add">Add</button>
</div>
<div id="myModal" class="modal">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h4></h4>
      </div>
      <div class="modal-body">
      </div>
    </div>
  </div>
</div>

注意:我为演示添加了 bootstrap v3.3.6 CSS 并删除了对 tablesorter 脚本的本地引用。

【讨论】:

这也不起作用 - 打开模态,但在单击日期选择器时未达到 shown.bs.modal。 @Craig 我的示例在单击日期选择器后但在显示模式后无法到达事件 - 尝试在事件侦听器中添加 console.log('test') 并检查它是否已触发。另一方面:选择器.input-group.date 是否正确。像这样.input-group .date之间不应该有空格吗?或者删除.date 进行测试。如果您也可以提供标记。也许这有助于发现问题。 没关系 - 我忘了标记已经在那里了。请检查事件是否被触发。 太棒了,非常感谢您发现它!是时候让我了解 z-index 是什么,以及它为什么会导致这样的问题!再次感谢您。 这对我帮助很大,伙计...谢谢:)【参考方案2】:

你必须在模态加载后调用日期选择器:

$("[id=add]").click(function() 

  $("#myModal .modal-header h4").html("Request for Change");
  $("#myModal .modal-body").html('<form class="form-horizontal" role="form"><br /><br /><label class="col-sm-2 control-label">Date Required</label><div class="col-sm-3"><div class="input-group date col-sm-8"><input type="text" class="form-control" id="DateRequired"><span class="input-group-addon"><i class="glyphicon glyphicon-th"></i></span></div></div></div>');
  $("#myModal").modal("show");

  $('#myModal').on('shown.bs.modal', function(e) 
    $('.input-group.date').datepicker(
      format: "dd/mm/yyyy",
      startDate: "01-01-2015",
      endDate: "01-01-2020",
      todayBtn: "linked",
      autoclose: true,
      todayHighlight: true
    );
  );

);

【讨论】:

恐怕这行不通。它打开模式,然后不触发 $('#myModal').on 函数【参考方案3】:
$('#myModal').on('shown.bs.modal', function (e) 
     $('.date').datepicker();
);

【讨论】:

【参考方案4】:

它对我有用!

$('#modal_form_horizontal').on('shown.bs.modal', function() 
    $('.daterangepicker').css('z-index','1600');
); 

【讨论】:

【参考方案5】:

在样式标签中,输入以下内容即可。模态的 z-index 超过了 datepicker 的 z-index。所以将日期选择器的 z-index 放在 9999

.ui-datepicker 
    z-index: 9999 !important;

【讨论】:

【参考方案6】:

您需要在Modal shown event 上启动日期选择器

【讨论】:

【参考方案7】:

当使用 bootstrap(使用 bootstrap 4.3.1 测试)和 jquery (3.4.1) jquery ui (1.12.1) 作为 datepicker 和 modal。日期选择器将在模态中正常工作。

除非您还在元素输入中使用类表单控件(引导程序)。 来自引导程序的 css 将使用 css 位置设置输入:相对。此时日期选择器将不再可见。

解决此问题的另一个方法是:

.form-control.datepicker  position:unset

或者不使用表单控件类

【讨论】:

【参考方案8】:
$(document).on('click','#add',function()
  $('.input-group.date').datepicker(
    format: "dd/mm/yyyy",
    startDate: "01-01-2015",
    endDate: "01-01-2020",
    todayBtn: "linked",
    autoclose: true,
    todayHighlight: true
  );
)

【讨论】:

这也不起作用 - 打开模态,但在单击日期选择器时未达到 shown.bs.modal。【参考方案9】:

这是由z-index引起的, 现在你可以在你的styles.css中手动设置日期选择器的z-index

/*Date picker container*/ bs-datepicker-container  z-index: 3000; 

【讨论】:

【参考方案10】:

默认情况下,模态 z-index 为 2050。您的日期选择器 z-index 应大于模态 z-index。

喜欢:

.datepicker 
    z-index: 2051 !important;

【讨论】:

以上是关于模式中的引导日期选择器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 混合问题:日期选择器不起作用

日期选择器不工作/显示 - Bootstrap 5

ajax调用后div中的日期选择器不起作用

引导模式内的日期选择器中的月份选择在 Firefox 中不起作用

日期选择器不起作用[重复]

多个日期选择器不起作用