单击浏览器后退按钮时,将关闭引导模式,但保留模态回退

tos*_*bre 12 modal-dialog backbone.js twitter-bootstrap

我正在使用Backbone和bootstrap.问题是当你通过应用程序,并在某些时候你打开引导模态窗口并按下后退按钮,模态窗口关闭但模态背景div(模态背景)保持不会消失.它覆盖整个屏幕,你不能点击任何东西.我注意到当你关闭模态时,通常模态背景div从html中删除,在这种情况下它会停留.

我正在网上搜索这个解决方案,并发现了类似的东西,但没有一个是按下浏览器后退按钮的潮流.

我想要捕获浏览器后退按钮事件和用户jquery来删除该div,但这不是真正好的解决方案.

有人能为这个问题指出一些解决方案吗?或者最后告诉我为什么会这样.

编辑:当按下后退按钮时,模态不会抛出hide.bs.modal事件,所以我无法捕获它并删除模态背景div

Mur*_*ali 6

试试这个。它对我有用。

<script type="application/javascript">
    $(window).on('popstate', function() {
        $('.modal').modal('hide');
        $( ".modal-backdrop" ).remove();
        $( ".in" ).remove();
    });
</script>
Run Code Online (Sandbox Code Playgroud)


Gau*_*tel 5

我们在使用AngularJS_v1.4.7和Bootstrap_v3.0开发的Web和移动应用程序中遇到此问题.预期的行为(跨应用程序)是,Popup应该关闭,页面转换不应该发生.换句话说,后退按钮只是关闭弹出窗口而没有其他内容.

以下修复工作正常,

//Detect location change
$rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl) {
        // Select open modal(s)
        var $openModalSelector = $(".modal.fade.in"); 
        if( ($openModalSelector.data('bs.modal') || {}).isShown == true){
            // Close open modal(s)
            $openModalSelector.modal("hide");
            // Prevent page transition
            event.preventDefault();
        }
    });
Run Code Online (Sandbox Code Playgroud)

此修复程序已成功测试,

  • 桌面上的Chrome浏览器
  • Windows 8.1手机
  • Android Lollipop


Rid*_*ANE 4

您可以监听 HTML5popstate事件,然后hide.bs.modal在发现显示模态背景时触发该事件。

$(window).on('popstate', function() {
  alert('Back button was pressed.');
});
Run Code Online (Sandbox Code Playgroud)

或者使用History.js工具及其事件来捕获后退按钮事件,然后执行与之前的解决方案相同的操作。