javascript - 附加到另一个后如何隐藏div?

标签 javascript

我有某种动态附加到不同 div 的下拉菜单。问题是,当有人点击“关闭”时,style.display = "none" 将不起作用。我可以更改背景、不透明度、大小,但我无法隐藏它。

代码如下所示:

    <style>
        html, body{
            height: 98%;
        }
        #editorViewport{
            width: 90%;
            height: 100%;
            min-width: 400px;
            min-height: 300px;
            position: relative;
            margin: 0 auto;
            border: 1px solid red;
        }
        #movingElementsContainer{
            display: none;
            top: 0px;
            left: 0px;
        }
        #addStartingElementBtn{
            width: 60px;
            height: 60px;
            margin: auto;
            position: absolute;
            top: 0; left: 0; bottom: 0; right: 0;
        }
        #addStartingElementBtn:hover{
            background-color: #c9eac6;
            border: 1px solid grey;
            cursor: pointer;
        }
        #elementsMenuContainer{
            width: 150px;
            border: 1px solid grey;
            background-color: white;
            min-height: 100px;
            padding: 5px;
            position: absolute;
            z-index: 2;
            display: none;
        }
        .elementOption{
            width: 90%;
            padding: 5px;
            border: 1px solid grey;
        }
        .elementOption:hover{
            border: 1px solid red;
            cursor: pointer;
        }
    </style>

<body>
    <div id="editorViewport">

        <div id="addStartingElementBtn" data-Owner="starting" data-Side="starting" class="openElementsMenu">
            Click!
        </div>
    </div>
    <div id="movingElementsContainer">
        <div id="elementsMenuContainer" data-Open="false" data-Owner="" data-Side="">
            <div data-Kind="1" class="elementOption">
                One
            </div>
            <div data-Kind="2" class="elementOption">
                Two
            </div>
            <div data-Kind="3" class="elementOption">
                Three
            </div>
            <div data-Kind="99" class="elementOption">
                Close
            </div>
        </div>
    </div>
</body>
<script type="text/javascript">

    function prepareEventHandlers(){
        var openElementsMenu = document.getElementsByClassName("openElementsMenu");
        var event = window.attachEvent ? 'onclick' : 'click';
        for(var i = 0; i < openElementsMenu.length; i++){
            if(openElementsMenu[i].addEventListener){
                openElementsMenu[i].addEventListener('click', elementsMenu, false);
            }else{
                openElementsMenu[i].attachEvent('onclick', elementsMenu);
            }
        }
        var elementOption = document.getElementsByClassName("elementOption");
        for(var i = 0; i < elementOption.length; i++){
            if(elementOption[i].addEventListener){
                elementOption[i].addEventListener('click', selectElementToCreate, false);
            }else{
                elementOption[i].attachEvent('onclick', selectElementToCreate);
            }
        }
    }
    window.onload = function(){
        prepareEventHandlers();
    }

    var totalElements = 0;
    var editorViewport = "editorViewport";
    var selectedElementId = ""; 

    var elementsMenu = function(){
        var elementsMenu = document.getElementById("elementsMenuContainer")
        this.appendChild(elementsMenu);
        elementsMenu.style.display = "block";
        elementsMenu.style.left = 61 + "px";
        elementsMenu.style.top = "0px";
        elementsMenu.setAttribute("data-Open", "true");
        elementsMenu.setAttribute("data-Owner", this.getAttribute("data-Owner"));
        elementsMenu.setAttribute("data-Side", this.getAttribute("data-Side"));
    }
    var selectElementToCreate = function(){
        var dataKind = this.getAttribute('data-Kind');
        var parentNode = document.getElementById(this.parentNode.id);

        alert(dataKind)
        if(dataKind == "99"){
            parentNode.style.display = "none"
            parentNode.setAttribute("data-Open", "false");
            parentNode.setAttribute("data-Owner", "");
            parentNode.setAttribute("data-Side", "");
        }
    }
</script>

这是一个JSFiddle

非常感谢任何建议!

最佳答案

            var selectElementToCreate = function(e){
            var dataKind = this.getAttribute('data-Kind');
            var parentNode = document.getElementById(this.parentNode.id);

            alert(dataKind)
            if(dataKind == "99"){
                console.log(parentNode);
                parentNode.style.display = "none"
                parentNode.setAttribute("data-Open", "false");
                parentNode.setAttribute("data-Owner", "");
                parentNode.setAttribute("data-Side", "");
                alert("Wont Close :");
            }
            e.stopPropagation();
        }

关于javascript - 附加到另一个后如何隐藏div?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29942051/

相关文章:

javascript - 我该如何调试这个奇怪的 IE JavaScript 问题

javascript - d3 转换中圆的碰撞/重叠检测

javascript - 使用 Cordova iOS 显示联系人的所有信息

javascript - 无法在箭头函数中调用 useState Hook

javascript - 全日历事件高度为零

javascript - 如果表单内有任何内容被使用且不为空,则发出警报

javascript - 解决Highchart和Highmap一起使用时的冲突(TypeError : ma is not a function)

javascript - 为什么我无法获取 $sceProvider?

javascript - If 条件推送包含/匹配字符串的值

javascript - 延迟加载 HTML5 图片元素