zoukankan      html  css  js  c++  java
  • onclick控制元素显示与隐藏时,点击第一次无反应的原因

    代码如下:

    <style> 
    #div1 { 100px; height: 100px; border: 1px solid red;}
    #p1 {height: 30px; background: green; display: none;}
    <style>
    <div id="div1">div1</div>
    <p id="p1">p1</p>

    var oDiv = document.getElementById('div1');
    var oP = document.getElementById('p1');
    oDiv.onclick = function(){
        if(oP.style.display=='none'){
            oP.style.display='block';
        }else{
            oP.style.display='none';
        }
    }

    上面的代码想要实现的效果是,当我点击DIV的时候,如果ul是隐藏的,那么显示出来,否则,就隐藏.但是当我点击第一次的时候,它总是没有反应,必须点击第二次的时候,才能正常工作.

    这是因为第一次点击的时候,虽然pCSS设置为display:none;但是用if(oP.display==='none')并无法获取到display的属性值.只有当我们把display:'none';写在行间样式的时候,才会被识别.

    解决办法就是用一个方法,去获取计算过后的样式,也就是确切的属性

    function getStyle(obj,attr){
         if(obj.currentStyle){//IE
            return obj.currentStyle[attr];
         }else{//ff
            return getComputedStyle(obj,false)[attr];
         }
     }
    

    这样上面的效果代码应该改为:

     oDiv.onclick=function(){
      if(getStyle(oP,'display')==='none')
       oP.style.display='block';
      else
       oP.style.display='none';
    }
  • 相关阅读:
    文件输入输出的管理以及管道的使用
    文件权限的管理以及acl权限列表
    安装配置Linux Squid代理服务器
    安全强化机制——SELinux
    存储系统管理(二)——Linux系统的swap分区、磁盘加密、磁盘阵列
    存储系统管理(三)——磁盘配额及lvm逻辑卷管理
    存储系统管理(一)——Linux系统的设备和分区管理
    core--线程同步
    Debian字符模式下修改显示分辨率
    core--作业
  • 原文地址:https://www.cnblogs.com/zhangfengyang/p/4682165.html
Copyright © 2011-2022 走看看