【问题标题】:Is there a way to close Bootstrap modal without call the hidden handler有没有办法在不调用隐藏处理程序的情况下关闭引导模式
【发布时间】:2014-03-03 06:26:53
【问题描述】:

我使用Bootstrap3 Modal。我将“hidden.bs.modal”与处理程序绑定,但在特殊情况下,我只需要关闭模式而不调用隐藏处理程序,之后,下次用户打开模式并再次关闭它,然后隐藏处理程序被调用正常:

//suppose modal is shown, unbind first to prevent the handler run
$('..').unbind('hidden.bs.modal');
$('..').modal('hide');
//rebind the handler
$('..').bind('hidden.bs.modal',function(){//...});

但似乎不起作用:它仍然调用处理程序。 有没有办法做到这一点?

谢谢

【问题讨论】:

  • 你试过先隐藏然后解除绑定吗?对元素调用 .modal('hide') 会在您解除绑定后再次附加该事件。 $('..').modal('隐藏'); $('..').unbind('hidden.bs.modal'); $('..').bind('hidden.bs.modal',function(){//...});
  • 试过但没有运气,正如我所说,我想要的是'只是隐藏模式而不调用隐藏处理程序',但是下次当你打开对话框并隐藏它时,它会像往常一样调用隐藏处理程序.
  • 我可能不理解这个场景。你不能只使用 $('..').hide(); ?
  • 使用 $('..').hide();确实隐藏了对话框,但将黑色背景留在那里,我无法再次与页面交互。
  • 这有点“hackish”,但你也可以 .hide() 那个元素。

标签: javascript twitter-bootstrap modal-dialog


【解决方案1】:

我之前也遇到过同样的问题,因此在某些情况下使用这种hackish 来防止调用隐藏回调。希望对你有帮助

function close_modal_without_callback() {
      $('#myModal').off('hidden.bs.modal');//`off` to remove event handler attached with `on`
      $('#myModal').modal('hide'); // hide modal
      setTimeout(function() { //to add little delay to reattach the event
            $('#myModal').on('hidden.bs.modal', function(e) {
                     hidden_handler(); //handler function 
            });
       }, 1000);
 }

【讨论】:

  • 您的 hack 几乎完美无缺,我只是忘记尝试超时方法...非常感谢。
  • 太棒了!我怎么想象.off 存在?!?!谢谢!
猜你喜欢
  • 2015-09-20
  • 1970-01-01
  • 2021-08-04
  • 2013-02-18
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多