max*_*eni 1 javascript twitter-bootstrap
我有一个引导模式,当手动打开或关闭时会触发其他操作。这些动作与show.bs.modal和hide.bs.modal事件挂钩。
现在,我还希望能够以编程方式打开或关闭模态而无需触发此操作。可能吗?
您需要一种确定触发方式的方式。旗帜或类似的东西。
根据Bootstrap文档(假设您使用的是版本3),e.relatedTarget将其设置为show.bs.modal在回调中针对事件单击的元素。因此,e.relatedTarget如果以编程方式触发,则为undefined。您可以使用它来避免您的show.bs.modal回调函数运行。例如:
$('#myModal').on('show.bs.modal', function (e) {
if (e.relatedTarget) {
// User triggered, do something...
}
});
Run Code Online (Sandbox Code Playgroud)
至于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');
Run Code Online (Sandbox Code Playgroud)
对于上述两种情况,另一个选择是在显示/隐藏之前删除事件监听器,触发要显示/隐藏的模式,然后重新添加事件监听器。