这个很麻烦。我在一些 Bootstrap 下拉菜单中也有几个日期选择器。我用两种方法解决了这个问题。
第一个使用 jQuery 来阻止事件在单击 DatePicker 时冒泡一次
$('.yourDatePicker').on('hide', function(event) {
event.stopPropagation();
$(this).closest('.yourDropDown').one('hide.bs.dropdown', function(ev) {
return false;
});
});
另一个更永久的解决方案是更改 datepicker.js 文件本身,但听起来您正在使用 datepicker cdn。如果你可以下载到本地使用,你可以破解打开你会发现代码看起来像这样
click: function(e){
e.preventDefault();
var target = $(e.target).closest('span, td, th'),
year, month, day;
if (target.length === 1){
switch (target[0].nodeName.toLowerCase()){
...ect...
如果你在这个区域添加一个 e.stopPropagation() 函数,像这样
click: function(e){
e.preventDefault();
e.stopPropagation(); // <-- add this
var target = $(e.target).closest('span, td, th'),
year, month, day;
if (target.length === 1){
switch (target[0].nodeName.toLowerCase()){
您的日期选择器将停止干扰您的其他 DOM 元素,尽管此解决方案更为普遍,我会进行测试以确保它不会影响您代码中的其他区域。