前两节都和addEventListener的click有关,于是在想它与onclick有什么区别呢,自己调试了一下,网上也有相关资料

事件绑定

onclick绑定方式

优点: 
- 简洁 
- 处理事件的this关键字指向当前元素 
缺点: 
- 不能对事件捕获或事件冒泡进行控制,只能使用事件冒泡,无法切换成事件捕获 
- 一次只能对一个元素绑定一个事件处理程序,当使用window.onload属性时,会覆盖采用相同方法所绑定的事件代码

//thisevent查一不大 推荐使用event对象 这样你总是可以拥有全部的可用信息

dd.onclick = function(event){
console.log(event.target.innerHTML);//event.target指向的是dd元素,以及他的所有信息
console.log(this.innerHTML);//this也是指向dd元素,包含他的可用信息
} //注意:有时也会有需要使用this的情况
//当需要鼠标移入和移出的时候 event会触发该事件每一个子元素 dd.onmouseover = function(event) {
this.style.backgroundColor = "red";//不会改变子元素
event.target.style.backgroundColor = 'red';//会改变子元素
};
dd.onmouseout = function(event) {
this.style.backgroundColor = "green"
event.target.style.backgroundColor="green"
};

addEventListener绑定方式

优点: 
- 可以支持事件处理的捕获阶段,也可以支持时间处理的冒泡阶段,两个阶段都是通过addEventListener最后一个参数设置为false(默认值,表示事件冒泡)或者true(表示事件捕获)来切换 
- 事件处理 this与onclick一样 
- 事件处理函数中,event对象总是作为第一个可用参数 
- 你可以为某个元素绑定多个事件而不会覆盖之前绑定的处理程序 (按照顺序执行) 
缺点: 
- IE8以下不支持

dd.addEventListener('click',function(e){
console.log(this.innerHTML);
console.log( e.target.innerHTML );
},false);

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(); 
阻止事件的进一步传播.(冒泡阶段和捕获阶段)

addEventListener的click和onclick的区别的更多相关文章

  1. click()和onclick()的区别

    click()和onclick()的区别: 1.onclick是绑定事件,告诉浏览器在鼠标点击时候要做什么 click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,就会触 ...

  2. change和onchange、click和onclick的区别

    change和onchange.click和onclick的区别: onchange和onclick都是js方法 可以在标签元素上使用  <input  onchange="" ...

  3. 关于click和onclick的区别

    click()和onclick()的区别: 1.onclick是绑定事件,告诉浏览器在鼠标点击时候要做什么 click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,就会触 ...

  4. $("").click与onclick的区别

    onclick是绑定事件,click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,下面示例 Html代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  5. $("").click与onclick的区别示例介绍

    Html代码: <script type="text/javascript"> $(function(){ $("#btn4").click(fun ...

  6. click和onclick的区别

    onclick是绑定事件,click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,下面有个示例,大家可以看看   Html代码 ? 1 2 3 4 5 6 7 8 9 1 ...

  7. javascript中click和onclick的区别

    <script type="text/javascript"> $(function(){ $("#btn4").click(function(){ ...

  8. 点击事件click和onclick的区别

    一句话:$(selector).click()事件只能绑定静态元素.$(selector).on('click',function(){ })支持动态绑定元素. 如果是动态生成的元素,绑定事件只能用o ...

  9. JS 中click和onclick的区别

    1.onclick是绑定事件,告诉浏览器在鼠标点击时候要做什么 2.click本身是方法,作用是触发onclick事件,只要执行了元素的click()方法,就会触发onclick事件

随机推荐

  1. poj3168 Barn Expansion【计算几何 平面扫描】

    Farmer John has N (1 <= N <= 25,000) rectangular barns on his farm, all with sides parallel to ...

  2. 计蒜客 31452 - Supreme Number - [简单数学][2018ICPC沈阳网络预赛K题]

    题目链接:https://nanti.jisuanke.com/t/31452 A prime number (or a prime) is a natural number greater than ...

  3. 【Python算法】遍历(Traversal)、深度优先(DFS)、广度优先(BFS)

    图结构: 非常强大的结构化思维(或数学)模型.如果您能用图的处理方式来规范化某个问题,即使这个问题本身看上去并不像个图问题,也能使您离解决问题更进一步. 在众多图算法中,我们常会用到一种非常实用的思维 ...

  4. 【Git 使用笔记】第四部分:git在公司中的开发流程

    先声明几个变量 仓管A:主分支,只有master分支仓管B:开发分支,只有各个业务开发分支   仓管B fork 于 A 如下图 为了保证 代码的稳定性,只有 仓管B中的某个分支测试完毕并进行了代码r ...

  5. 网站搜索引擎优化(SEO)的18条守则

    1.永远不要放过网页的title,这个地方应该是你每次优化的重点. 2.请不要在title,deion,keyword里写太多东西,越是贪婪,得到的就越少. 3.网页的头部和底部是很重要的,对于搜索引 ...

  6. 学习计划 nginx 中 php的配置详解

    本章只看一个刚下载的nginx是如何支持php的 -- location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_inde ...

  7. Google Guava缓存实现接口的限流

    一.项目背景 最近项目中需要进行接口保护,防止高并发的情况把系统搞崩,因此需要对一个查询接口进行限流,主要的目的就是限制单位时间内请求此查询的次数,例如1000次,来保护接口. 参考了 开涛的博客聊聊 ...

  8. [转]基于S2SH框架的项目—antlr-2.7.2.jar包冲突问题

    java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I        org.hibernate.hql.ast.HqlSqlWal ...

  9. Hibernate错误

    1.Field 'id' doesn't have a default value 原来是我的数据设计的时候,把主键的类型定义为int的,原本想是用自增的方式来的,可是由于自己的粗心,写sql语句的时 ...

  10. curl 一个无比有用的网站开发工具

    1.Common Line Url Viewer curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面. 2.-i参数可以显示h ...