javascript - 绝对定位元素的 Z-Index 显示在更高 Z-Index 元素之上

标签 javascript jquery css

我正在尝试创建一些 javascript,当一个对象被添加到窗口时,一个监听器会监听除了放置的对象之外的 body 上的任何点击,并且如果在窗口上的任何地方除了实际对象本身被点击时删除该对象.

通过无数次不成功的尝试,我想出的想法是动态地向屏幕添加一个覆盖 div,称为 overlay2(或其他,这无关紧要),然后监听对该 div 的点击。当我将叠加层添加到窗口并将 zIndex 设置为比已放置的顶部元素(比如 5000)更高的数字,然后将要放置在叠加层上方的唯一对象的 zIndex 设置为更高的数字(比如 6000) ,叠加层仍然出现在所有内容之上,我无法选择要放置在其上方的 div 中的任何对象。

var overlayDiv = document.createElement('div');
    overlayDiv.setAttribute('id', 'overlay2');
    overlayDiv.style.zIndex = '5000';
    overlayDiv.style.width = '100%';
    overlayDiv.style.height = '100%';
    overlayDiv.style.left = '0';
    overlayDiv.style.top = '0';
    overlayDiv.style.position = 'absolute';
    document.body.appendChild(overlayDiv);

    $(container).append(template);
    template.style.zIndex = '6000';

    //Listeners     
    //Page click listener. Closes the tool when the page is clicked anywhere but inside the parent.
    var initialClick = false;
    $('body').on('click.editObjectListeners', function(event) {
        var target = EventUtility.getTarget(event);
        if(initialClick) {
            console.log(target.id);
            if(target.id == 'overlay2' && target.id != '') {
                $(overlayDiv).remove();
                finish();
            };
        }
        initialClick = true;
    });

我确定这与 overlayDiv 的绝对定位有关。在测试时,如果我使用绝对定位来放置模板,并且如果我将模板对象直接附加到 body 上,就像我做 overlayDiv 一样,zIndex 会像我最初预期的那样在 overlayDiv 上方工作。不幸的是,除了测试目的之外,绝对定位这个元素对我来说没有多大意义。有办法解决这个问题吗?

最佳答案

事实证明,z-index 只能成功地用于绝对放置的元素。所以原计划解决body click listener的方案行不通了。相反,我决定改用 jQuery 和监听器对象来监听点击。这是一个更简洁的解决方案,我只需要全神贯注。 You can view my other solution here.

关于javascript - 绝对定位元素的 Z-Index 显示在更高 Z-Index 元素之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8784949/

相关文章:

javascript - 如何计算一个月的工作时间?

javascript - 如何将数据从文本文件加载到javascript数组?

javascript - 为什么我的 html 请求在 javascript 中不起作用

javascript - 简单的切换 div 可见性与 Javascript 不起作用

CSS如何在同一个div中将一个词左对齐另一个词右对齐?

javascript - 使用 Javascript 时输入不会返回 true

DOM 中新元素的 jQuery Mobile 格式化

javascript - 验证不是一个函数

javascript - jQuery 插件 - 在变量上调用插件方法

html - 最大宽度不适用于 flexbox+align-items : center