谈谈js点击之后发生了什么

JavaScript024

谈谈js点击之后发生了什么,第1张

    之所以突然想写这个文章,主要是之前看到一篇有意思的博文, 《探究点击事件在JavaScript事件循环中的表现》 ,有趣的地方在于JS点击事件加入回调的 并不是点击事件的回调方法 ,而是点击事件本身 (点击位置等描述点击的) 。

当我们连续点击 button.a 两次的时候,结果却是

明明是点击的 button.a ,为什么会触发 button.b 的事件?

    无论通过 onclick 还是 addEventListener 实现事件绑定,我怀疑绑定机制是一样的,因为在实际测试中,我发现 onclick 执行顺序和 addEventListener 是一样的,也就是什么时候绑定,那么就在第几个执行。

     addEventListener 和 onclick 不同,不是直接给 dom 绑定属性,并且我在 dom 节点上也没有看到任何相应的对象用于保存事件,可见 addEventListener 是不同的机制,参考 EventEmitter ,试着去实现一个 addEventListener

通过上面分析,总结一下

第一次点击 执行a函数(里面又重新给a标签定义了点击事件)

第二次点击 就会触发a函数里重新定义的点击事件了

可以把a标签的 onclick="a()" 都删掉

然后a函数里的代码直接拿出来,相当于页面加载的时候就执行了

有一种情况可能是因为网页中的某些JavaScript脚本代码往往需要在文档加载完成后才能够去执行,否则可能导致无法获取对象的情况,当第一次点击时文档才加载完毕;所以第二次点击时才有反应。为了避免类似情况的发生,可以使用以下两种方式:

(1).将脚本代码放在网页的底端,运行脚本代码的时候,可以确保要操作的对象已经加载完成。

(2).通过window.onload来执行脚本代码。