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';
    }
  • 相关阅读:
    leetcode 18 4Sum
    leetcode 71 Simplify Path
    leetcode 10 Regular Expression Matching
    leetcode 30 Substring with Concatenation of All Words
    leetcode 355 Design Twitte
    leetcode LRU Cache
    leetcode 3Sum
    leetcode Letter Combinations of a Phone Number
    leetcode Remove Nth Node From End of List
    leetcode Valid Parentheses
  • 原文地址:https://www.cnblogs.com/zhangfengyang/p/4682165.html
Copyright © 2011-2022 走看看