Events 引导模式和日期选择器显示事件

Events 引导模式和日期选择器显示事件,events,modal-dialog,show,datapicker,Events,Modal Dialog,Show,Datapicker,当单击datepicker()时,会激发他的SHOW事件,但模态的SHOW.BS.modal也会激发。有什么问题吗 $(document).ready(function() { $('#ArrDate') .datepicker() .on("show", function(event){ alert("Q"); }); $("#dlg3000to3100") .on('show.bs.modal', function (event) { alert("W"); }); $(

当单击datepicker()时,会激发他的SHOW事件,但模态的SHOW.BS.modal也会激发。有什么问题吗

$(document).ready(function() {
$('#ArrDate')
.datepicker()
.on("show", function(event){
    alert("Q");
});

$("#dlg3000to3100")
.on('show.bs.modal', function (event) {
    alert("W");
});

$("#dlg3000to3100")
.modal("show");
});
范例

谢谢

这似乎是datepicker的一个bug(或功能?)。您可以做的是防止
show.bs.modal
事件到达对话框

$('#ArrDate').on('show.bs.modal', function (event) {
    event.stopPropagation();
});

这将在日期选择器级别检测事件并停止事件传播,因此
show.bs.modal
不会“冒泡”到对话框。

也有类似的问题,原因是日期选择器正在监视显示事件

$('#ArrDate').on('show.bs.modal', function (event) {
    event.stopPropagation();
});
一种选择是在模式上使用显示的事件,但这在所有情况下都不理想

$('#dlg3000to3100').on('shown.bs.modal', function (event) {
    // modal code in here
});
更优雅的解决方案是检查事件的名称空间

$('#dlg3000to3100').on('show.bs.modal', function (event) {
    if(event.namespace !== 'bs.modal') return;
    // modal code in here
});

另一个解决方法是在模式事件上将show.bs.modalshow.bs.modal交换

modal.on('shown.bs.modal', function (event) {
               // Do something
            });
但是,如果无法将“显示”与“显示”或“隐藏”交换为“隐藏”,请使用名称空间检查

modal.on('show.bs.modal', function(e) {
    if (e.namespace === 'bs.modal') {
         // Do something
    }

}))

先生,你是个救生员。非常感谢。