jquery - Bootstrap 3 - 使用固定侧边栏时模态消失在背景下方

标签 jquery css twitter-bootstrap twitter-bootstrap-3

我已经确定这个问题是由于弹出窗口被包含在另一个带有 position:fixed 的 div 中引起的由于我正在使用的固定侧边栏功能,我无法避免,该功能将所有内容包含在正文中并将其包含在单独的 div 中。 为了解决这个问题,我正在考虑使用以下代码动态更改模态的位置 -

$('.modal').on('show.bs.modal', function (e) {
        e.preventDefault();
        $(this).appendTo("body").modal('show');
     });

这样做只会给我一个 <error> jquery.js:1在控制台中。此修复曾经在 bootstrap 2 中完美运行。

编辑 - 接下来尝试这个

$('.modal').on('show.bs.modal', function (e) {
        e.preventDefault();
        console.info(e);
        $(e.target).appendTo('body').modal('show');
     });

但这显然会把事情搞砸,因为它陷入了无限循环。一旦我找到一种有效的方法来一次检测同一模态上的多个显示事件,我猜它会好起来的。

最佳答案

好的,经过一个多小时的编码和评估,我强调了所有可能的解决方案 -
1. 将模态框从应该具有 position:fixed 或 relative 的 css 属性的父容器中取出。
2. 删除模态元素本身的上述两个属性。
3. 对于像我这样的情况,在需要响应的情况下,模态自动附加到 div 的一部分,我为 bootstrap 3 编写了以下代码,它应该可以在所有模态上通用地工作,而不需要为每个模态单独编写 javascript。

    var checkeventcount = 1,prevTarget;
    $('.modal').on('show.bs.modal', function (e) {
        if(typeof prevTarget == 'undefined' || (checkeventcount==1 && e.target!=prevTarget))
        {  
          prevTarget = e.target;
          checkeventcount++;
          e.preventDefault();
          $(e.target).appendTo('body').modal('show');
        }
        else if(e.target==prevTarget && checkeventcount==2)
        {
          checkeventcount--;
        }
     });

到目前为止,这非常有效。它已针对 bootstrap 3 进行了编码,如果您更改事件处理程序以检测模态打开事件之前的事件,它也应该适用于其他版本。

关于jquery - Bootstrap 3 - 使用固定侧边栏时模态消失在背景下方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21126617/

相关文章:

javascript - 添加了 .on ('click' 的 CSS 类)在第一个事件后不可见

css - 显示悬停的 <li> 行

javascript - Bootstrap 工具提示不显示

ios - 无法使用 Bootstrap 让我的 iPhone 横向媒体查询正常工作

css - 使用通用 CSS 类进行 Bootstrap 3 设置

jquery - 对象没有方法 datepicker

javascript - 监听只有输入/返回键的事件(不是其他的)

javascript - jQuery Slider 在 IE 中不工作

javascript - 如何在最后一个单词上添加<br/>标签?

php - 从网站联系表接收电子邮件但没有内容