首頁  >  問答  >  主體

javascript 在使用onclick需要点击两次才能触发代码,请问这是怎么回事?

对文档里的一个元素节点创建一个onclick事件处理函数,在测试程序的时候,发现需要点击两次才会触发相应的程序,请问这是怎么回事,望大神帮助,或者有遇到相同情况进来讨论

window.onload=function (){ 
    var op=document.getElementById("p");
    var oUl=document.getElementById("ul");

    op.onclick=function (){ 
        if(oUl.style.display=="none"){
            oUl.style.display="block";
            alert(oUl.style.display);
        }else{ 
            oUl.style.display="none";
            alert(oUl.style.display);
        };
    };
};
#ul{ 
    display: none;
    margin: 0 auto;
    padding: 0;
    width: 100px;
    height: 150px;
    text-align: center;
    list-style-type: none;
    border: 1px solid #ccc;
}

这里我设置了alert(oUl.style.display);进行判断oUl.style.display的值,单点击第一次的时候,提示输出的是none,要点击第二次才输出block,可是我在css中就先设置display="none",请问为什么会这样?


在oUl.style.display=="none"此处若改成oUl.style.display!="block" 则不会出现需要点击两次的情况,请问这是怎么回事?

大家讲道理大家讲道理2772 天前599

全部回覆(3)我來回復

  • 阿神

    阿神2017-04-11 10:33:10

    改改代码:

    window.onload=function (){ 
        var op=document.getElementById("p");
        var oUl=document.getElementById("ul");
    
        op.onclick=function (){ 
            if(window.getComputedStyle(oUl).display=="none"){
                oUl.style.display="block";
                alert(oUl.style.display);
            }else{ 
                oUl.style.display="none";
                alert(oUl.style.display);
            };
        };
    };

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-11 10:33:10

    因为你js里的oUl.style.display实际上是用的oUI的内联样式,即style属性设置的样式;而你设置的display,是在css文件里,所以访问不到。
    可以使用计算后的样式来设置:oUl.currentStyle //IE 或window.getComputedStyle(oUl) //W3C。
    或者使用HTML DOM来访问外联样式:document.styleSheets[0].rules[0].style.display //IE 或

                              document.styleSheets[0].cssRules[0].style.display  //W3C

    回覆
    0
  • 阿神

    阿神2017-04-11 10:33:10

    window.onload=function (){

    var op=document.getElementById("p");
    var oUl=document.getElementById("ul");
    
    op.onclick=function (evt){ 
        if(oUl.style.display=="none"){
            oUl.style.display="block";
            alert(oUl.style.display);
        }else{ 
            oUl.style.display="none";
            alert(oUl.style.display);
        };
    };

    };

    回覆
    0
  • 取消回覆