如何再一次点击按钮OK键,让弹出层消失?

如何再一次点击按钮OK键,让弹出层消失?

<!DOCTYPE html>
<html lang="en">
<head>
    <title>弹出层2</title>
    <meta charset="utf-8">
    <link rel="stylesheet"  href="Alert2.css">
    <script type="text/javascript">
        function show() {
            var contentObj = document.createElement("div");
            contentObj.setAttribute("class","content");

            
            //设定contentobj 的 innerHTML
            var html = '<div class="first">';
            html += '<div class="second">接下来就是见证奇迹的时刻!</div>';
            html += '<div class="third">';
            html += '<input type="button" value="OK" onclick="ok()">';
            html += '<input type="button" value="NO" onclick="no()">';
            html += '</div>';
            html += '</div>';

            contentObj.innerHTML = html;

            document.body.appendChild(contentObj);
            contentObj.style.display ="block";
      }
          function ok() {
         var content = document.getElementsByClassName('content')[0].style;
              content.display = "none";
             
              var i=0;
              var changeColor = function (node) {
                node.style.backgroundColor = "#99" + i.toString(16);
                if(i<16){
                   i++;
                   setTimeout(function () {changeColor(node)},200)
                
                }
                // else{
                   // i=0;
                   // setTimeout(function () {changeColor(node)},400)
                // }
        };        
        changeColor(document.body);     
     }
    
       function no() {
            var content = document.getElementsByClassName('content')[0].style;
                 content.display = "none";
                 
       }

    </script>    
    
</head>
<body>
<input type="button" value="start" onclick="show()">
</body>
</html>

接下来是css代码

body{
            /*background-color:#cccc00;*/
            background-color: #99FF00;
            margin: 0;
            padding: 0;
        }
       .content{
      
           display: none;
       
       }
        .first{
            width: 350px;
            height: 200px;
            /*margin-top: 60px;*/
            margin: 0 auto;
            background-color: cyan;
            border:4px solid purple;
            text-align: center;    
        }
        .second{
            font-size: 24px;
            margin-top: 50px;
            color: red;
        }
        .third{
            margin-top: 50px;

        }
        .third > input{
            margin-left: 20px;
        }

第一次点击OK键会消失,不刷新的话点击第二次就直接不消失了,请问这是为什么?

阅读 2.7k
2 个回答

var contentObj = document.createElement("div");
///////////////////////////
var content = document.getElementsByClassName('content')[0].style;
             content.display = "none";

改为

contentObj = document.createElement("div");
////////////////// 
contentObj.style.display = "none";

也就说将:获取contentObj的方式

  1. contentObj上升为全局变量

  2. 通过Dom操作获取content

  3. 通过函数参数,传递点击的事件(事件中有触发事件的对象input)

通过上述其中的一个方法可解决上述的问题.

因为你js代码中使用的选择器是选择class为content的第一个div,所以只会第一个的div改变,如果想要达到你想要的效果,建议采用js中的单例模式,即:点击start时,如果页面中没有创建div,则创建,如果已经创建了,则不再创建。做一下判断,这样的话,就能保证页面只会创建一个div。如果想创建多个div的话,也可以将ok()函数使用this来选择点击时的div,来设置display,即:利用this修改操作dom。----大概思路就是这样,希望对你有帮助。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题