我有一个引导模式,可以在手动打开或关闭时触发其他操作。这些操作与show.bs.modal
和hide.bs.modal
事件相关联。
现在我还希望能够以编程方式打开或关闭模式,而不会触发此操作。有可能吗?
答案 0 :(得分:4)
你需要一种方法来确定模态是如何被触发的;国旗或类似的。
根据Bootstrap documentation(假设您正在使用版本3),e.relatedTarget
被设置为在回调中为show.bs.modal
事件点击的元素。因此,如果以编程方式触发,则e.relatedTarget
未定义。您可以使用它来避免运行show.bs.modal
回调函数。例如:
$('#myModal').on('show.bs.modal', function (e) {
if (e.relatedTarget) {
// User triggered, do something...
}
});
对于hide.bs.modal
事件,没有类似的属性可用,但您可以通过切换类或数据属性实现相同的效果。在您要在代码中隐藏模态之前设置此标记,并确保模态的hide.bs.modal
回调检查其存在,并且仅在不存在时运行。例如:
// Prep modal event
$('#myModal').on('hide.bs.modal', function (e) {
if (!$('#myModal').hasClass('programmatic')) {
// User triggered, do something...
}
});
// When hiding your modal
$('#myModal').toggleClass('programmatic');
$('#myModal').modal('hide');
对于上述两种情况,另一种选择是在显示/隐藏之前删除事件侦听器,触发要显示/隐藏的模式,然后重新添加事件侦听器。