addEventListener的click和onclick的区别
前两节都和addEventListener的click有关,于是在想它与onclick有什么区别呢,自己调试了一下,网上也有相关资料
事件绑定
onclick绑定方式
优点:
- 简洁
- 处理事件的this关键字指向当前元素
缺点:
- 不能对事件捕获或事件冒泡进行控制,只能使用事件冒泡,无法切换成事件捕获
- 一次只能对一个元素绑定一个事件处理程序,当使用window.onload属性时,会覆盖采用相同方法所绑定的事件代码
addEventListener绑定方式
优点:
- 可以支持事件处理的捕获阶段,也可以支持时间处理的冒泡阶段,两个阶段都是通过addEventListener最后一个参数设置为false(默认值,表示事件冒泡)或者true(表示事件捕获)来切换
- 事件处理 this与onclick一样
- 事件处理函数中,event对象总是作为第一个可用参数
- 你可以为某个元素绑定多个事件而不会覆盖之前绑定的处理程序 (按照顺序执行)
缺点:
- IE8以下不支持
demo如下
<input type="button" id="iS_addEventListener" value="addEventListener"> <input type="button" id="iS_onclick" value="onclick"><script type="text/javascript">(function(){document.getElementById("iS_addEventListener").addEventListener("click",function(){alert("我是addEventListener1");},false);document.getElementById("iS_addEventListener").addEventListener("click",function(){alert("我是addEventListener2");},false);//onclick是重新赋值,变量提升document.getElementById("iS_onclick").onclick = function() {alert("我是onclick1");}document.getElementById("iS_onclick").onclick = function() {alert("我是onclick2");}})();</script>结果是onclick只出现一次alert:我是click2【很正常第一次click事件会被第二次所覆盖】,但是addEventListener却可以先后运行,不会被覆盖【正如:它允许给一个事件注册多个监听器。在使用DHTML库或者 Mozilla extensions 这样需要保证能够和其他的库或者差距并存的时候非常有用。】
解除事件绑定
对于onclick,直接 dd.onclick = null;
对于addEventListener则需要,oElement.removeEventListener(sEvent,fnHandler,false);
阻止事件冒泡
e.stopPropagation(); 或 return false;
dd.onclick = function(e){console.log(e.target.innerHTML);this.style.color = 'red';//阻止事件冒泡 //防止点击dd的时候隐藏了父级domClick e.stopPropagation(); //或 return false; }区别:
return 可以同时阻止冒泡,且阻止事件的默认行为>
[比如a点击链接时跳转到百度,return false,便会阻止跳转]
event.stopPropagation();
阻止事件的进一步传播.(冒泡阶段和捕获阶段)
更多专业前端知识,请上 【猿2048】www.mk2048.com
总结
以上是生活随笔为你收集整理的addEventListener的click和onclick的区别的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Ajax jquery的库的简化版本
- 下一篇: 有趣的js匿名函数写法(function