我有一个带有多个datetimepickers的html模板。如果我单击按钮打开一个datetimepicker,然后单击另一个以打开新的,则第一个保持不变(它不会关闭)。我希望一次只能打开一个datetimepicker。
$('#datetimepicker1, #datetimepicker2').datetimepicker();
这是bootstrap datetimepicker 2.5的标准行为,当时使用时刻2.5(与langs一起),但现在似乎没有像那样工作。
有没有人有任何想法解决这个问题?
注意:我正在使用Eonasdan bootstrap-datetimepicker版本3.0.3,时刻2.8(与语言环境一起使用),jQuery 1.9和Bootstrap 3
这里有一点棘手的是bootstrap-datetimepicker为每个初始化的datetimepicker追加到<body>
<div>
,与其触发按钮完全无关。
答案 0 :(得分:5)
试试这个:
$('.date').datetimepicker();
$(document).ready(function() {
// Select all elements with the 'date' class
$('.date').on('dp.show', function() {
$('.date').not($(this)).each(function() {
$(this).data("DateTimePicker").hide();
// $('.date').not($(this)) selects all the .date elements except
// for the one being shown by the datetimepicker dp.show event.
// The dp.show event is fired when a new datetimepicker is opened.
// We use the .data("DateTimePicker") to access the datetimepicker object
// (we have to use a jQuery each loop in order to access all the
// datetimepickers.
// .hide() -- we hide it.
});
});
});
这应该只允许一次打开一个datetimepicker。
答案 1 :(得分:1)
尽管Joel Lubrano的回答与预装的小部件的作用相同......但它缺乏使用动态生成的小部件(通过JS)的可能性。与此同时,我设法从组件内部解决了这个问题,通过添加一行来解决这两个问题。
在组件的JS内部找到picker.show
函数(在1150行左右,具体取决于版本(在v1.3.1中))...在该函数的最后一个else语句中,放置以下行作为该陈述的第一条指示。
$('.picker-open').hide().removeClass('picker-open');
就是这样。之后,您只需要在函数中封装DTP初始化,并在文档准备就绪并在动态生成的小部件之后调用它。
function DTPinit(){
$('.dtp').datetimepicker();
}
$(function(){
DTPinit();
$('#dtp_gen').on('click', function(){
$('body').append('<div class="form-group"><div class="input-group dtp date""><input type="text" class="form-control datetimepicker" /><span class="input-group-addon"><span class="glyphicon-calendar glyphicon"></span></span></div></div>');
DTPinit();
});
});
这里有一个JSFiddle来说明我上面描述的内容。 BS-DTP组件正在小提琴JS容器中加载以进行编辑。