javascript - 原生JS绑定click事件,第一次点击没反应

查看:195
本文介绍了javascript - 原生JS绑定click事件,第一次点击没反应的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

第二次开始就可以了,
这个怎么解决呢

解决方案

首先咱们明确一下,你这个绑定肯定是一开始就绑定上去的!不是第一次没有绑定导致的结果,第一次没有如你预期的结果是因为你取style.display,这个东西取得是什么呢?是一个元素的特性style,特性是什么?只有写在行内的,它才可以取到!所以第一次,虽然你的计算display属性是'block'可是对style.display来说却是'',你可以简单的通过一个log就可以判断出来确实第一次点击就存在绑定的。要解决很简单,不要通过取style.display来判断,

<script type="text/javascript">
        function getStyle(dom, attr) {
            if (dom.currentStyle) {
                return dom.currentStyle[attr]
            } else {
                return getComputedStyle(dom)[attr]
            }
        }

      var div=document.getElementsByClassName("example");
      var btn=document.getElementsByClassName("btn");
      for(let i=0;i<btn.length;i++)
        {
          btn[i].addEventListener("click",function(){
        if(getStyle(div[i], 'display')=='block'){
          div[i].style.display="none";
        }else{
          div[i].style.display='block';
        }
      })
        }
    </script>

如果jq用的多了,一个css()调用就可以取到真正的属性值,难免让人产生错觉,但是其实style只能取到行内属性,对于计算后的css属性,它是无能为力的,第一个helper函数主要解决ie和其他浏览器的不兼容问题,还有感觉题主的代码写的不是特别注意,一些缓存domlist长度,事件委托这些都没有考虑,即使是一个联系demo也应该尽量写的正规提醒自己,以上。谢谢

补充一下吧:
dom.style.att中只可以取到定义在元素标签上的或者由js写入的style属性,通过css定义的属性则取不到!!!
windo.getComputedStyle('dom元素', '伪类名')可以得到一个dom元素(如果不查伪类就不传)的最终style属性,也就是可以取到所有属性,包括定义在css文件的,由浏览器定义的默认样式!但是这个是只读对象!!!老ie不支持此属性,老ie对应的是dom.currentStyle属性!

这篇关于javascript - 原生JS绑定click事件,第一次点击没反应的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆