如何在不触发事件的情况下打开/关闭引导模式?

时间:2016-01-31 10:58:26

标签: javascript twitter-bootstrap

我有一个引导模式,可以在手动打开或关闭时触发其他操作。这些操作与show.bs.modalhide.bs.modal事件相关联。

现在我还希望能够以编程方式打开或关闭模式,而不会触发此操作。有可能吗?

1 个答案:

答案 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');

对于上述两种情况,另一种选择是在显示/隐藏之前删除事件侦听器,触发要显示/隐藏的模式,然后重新添加事件侦听器。