【问题标题】:Bind a function to Bootstrap Modal Close by ESC key通过 ESC 键将函数绑定到 Bootstrap 模式关闭
【发布时间】:2016-06-14 04:41:21
【问题描述】:

我知道我们可以为关闭事件绑定一个函数到引导模式,如下所示:

$("#myModal").on('hide.bs.modal', function(){ 
    //run the script
});

但这仅在您通过单击灰色区域或单击 Firefox 中的关闭按钮关闭模式时才有效。但是,每当我尝试通过 ESC 键关闭模式时,我的脚本就会运行。我不想禁用 ESC 键来关闭引导模式。 是否有任何解决方案可以通过在 Firefox 的引导程序中按转义来检测关闭模式?

您可以查看样本 jsfiddle here。在此示例中,在 Firefox 中,如果您在模态中播放 YouTube 视频并通过按转义键关闭模态,则视频不会停止,但如果您单击关闭按钮或单击灰色区域,则关闭功能正常工作并清除 iframe src 所以视频停止。

【问题讨论】:

  • 你能在sn-p中分享你的代码吗?
  • 我刚刚在问题中添加了一个示例,表明它不适用于转义键,但适用于其他情况。
  • @billynoah 抱歉,我忘了说要在模态 div 中添加 tabindex="-1" 以启用 esc 键。
  • 另一种解决方案:jsfiddle.net/8vvx9bkc/2

标签: jquery twitter-bootstrap bootstrap-modal


【解决方案1】:

为您的模式的关闭事件添加下面的代码。它也适用于 esc 按钮。

$("#myModal").on('hide.bs.modal', function(){
     setTimeout(function(){
    $("#cartoonVideo").attr('src','');
    });    
});

这是fiddle

【讨论】:

  • 不,我认为您没有正确注意到问题。如果您将 tabindex="-1" 添加到此,模式会弹出,但是当您播放 youtube 视频并在 iframe 外部单击然后按您提到的键时,模式将关闭但视频不会停止。因为 youtube iframe src 没有被清除。但是,如果您通过单击灰色区域或关闭图标将其关闭,则视频将停止。所以这意味着模态关闭功能在按下 esc 按钮时无法正常工作
  • 根据您的建议,我已将警报放入引导隐藏事件中。所以首先我播放了视频,然后我点击了模态的标题。之后我按下了退出键,它显示我很警觉。它还会按预期停止视频。
  • 我注意到问题出现在 Firefox 而不是 chrome 中。请用firefox测试一下。我将示例链接更改为 jsfiddle。现在可以测试了
  • 你能试试这个 jsfiddle。我认为这现在应该可以了。 jsfiddle.net/8vvx9bkc/1
  • 感谢库尔迪普。它解决了这个问题。我猜 settimeout 解决了它。请编辑您的答案并使用解决方案进行更新,以便我给您投票
【解决方案2】:

经过无数次来回后,我想出了这个,所以我想我会添加它作为另一种可能的解决方案。使用模态创建和销毁 iframe。我以前在 Firefox 上看到过这样的行为,发现 setTimeout() 有时可以工作,而其他时候则表现不一致。使用这种方法,您可以保证<iframe> 将真正被清除:

$(document).ready(function() {
  $("#myModal").on('hide.bs.modal', function() {
    $("#cartoonVideo").remove();
  });
  $("#myModal").on('show.bs.modal', function() {
    $('#myModal .modal-body').html('<iframe id="cartoonVideo" width="560" height="315" src="//www.youtube.com/embed/YE7VzlLtp-4" frameborder="0" allowfullscreen></iframe>');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />

<div class="bs-example">
  <!-- Button HTML (to Trigger Modal) -->
  <a href="#myModal" class="btn btn-lg btn-primary" data-toggle="modal">Launch Demo Modal</a>

  <!-- Modal HTML -->
  <div id="myModal" class="modal fade" tabindex="-1">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
          <h4 class="modal-title">YouTube Video</h4>
        </div>
        <div class="modal-body">
        </div>
      </div>
    </div>
  </div>
</div>

【讨论】:

  • 工作正常。谢谢
  • 谢谢 - 我了解到 Firefox 的另一个特质,试图解决这个问题。
猜你喜欢
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多