addEventListener的click和onclick的区别
前两节都和addEventListener的click有关,于是在想它与onclick有什么区别呢,自己调试了一下,网上也有相关资料
事件绑定
onclick绑定方式
优点: 
- 简洁 
- 处理事件的this关键字指向当前元素 
缺点: 
- 不能对事件捕获或事件冒泡进行控制,只能使用事件冒泡,无法切换成事件捕获 
- 一次只能对一个元素绑定一个事件处理程序,当使用window.onload属性时,会覆盖采用相同方法所绑定的事件代码
//this与event查一不大 推荐使用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的区别的更多相关文章
- click()和onclick()的区别
		
click()和onclick()的区别: 1.onclick是绑定事件,告诉浏览器在鼠标点击时候要做什么 click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,就会触 ...
 - change和onchange、click和onclick的区别
		
change和onchange.click和onclick的区别: onchange和onclick都是js方法 可以在标签元素上使用 <input onchange="" ...
 - 关于click和onclick的区别
		
click()和onclick()的区别: 1.onclick是绑定事件,告诉浏览器在鼠标点击时候要做什么 click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,就会触 ...
 - $("").click与onclick的区别
		
onclick是绑定事件,click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,下面示例 Html代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
 - $("").click与onclick的区别示例介绍
		
Html代码: <script type="text/javascript"> $(function(){ $("#btn4").click(fun ...
 - click和onclick的区别
		
onclick是绑定事件,click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,下面有个示例,大家可以看看 Html代码 ? 1 2 3 4 5 6 7 8 9 1 ...
 - javascript中click和onclick的区别
		
<script type="text/javascript"> $(function(){ $("#btn4").click(function(){ ...
 - 点击事件click和onclick的区别
		
一句话:$(selector).click()事件只能绑定静态元素.$(selector).on('click',function(){ })支持动态绑定元素. 如果是动态生成的元素,绑定事件只能用o ...
 - JS  中click和onclick的区别
		
1.onclick是绑定事件,告诉浏览器在鼠标点击时候要做什么 2.click本身是方法,作用是触发onclick事件,只要执行了元素的click()方法,就会触发onclick事件
 
随机推荐
- ggplot2绘制概率密度图
			
以下绘图以Weibull分布(韦伯分布.威布尔分布)为例 关于Weibull分布(韦伯分布.威布尔分布),请参考本人博客http://www.cnblogs.com/wwxbi/p/6141501.h ...
 - 8.30前端jQuery和数据结构知识
			
2018-8-30 16:37:17 单链表的demo 从俺弟家回来了! 发现,还是要努力学习是很重要的!!努力学习新的感兴趣的东西!! 多读书还是很重要的!!! 越努力,越幸运! # coding: ...
 - ELK之写入MySQL数据库
			
安装MySQL5.6 创建数据库并且授权 create database elk character set utf8 collate utf8_bin; grant all on elk.* to ...
 - TensorFlow 度量张量和张量或者和零之间的误差值
			
用于一个回归任务或者正则问题 # l2损失,output= sum(x ** 2)/2 inputdata = tf.Variable(np.random.rand(2,3), dtype=np.fl ...
 - xp上使用vsphere client报错问题
			
出现该问题的原因是新版本的esxi和vcenter中增强了加密强度,而Windows XP和Windows Server 2003未能达到所需加密强度,client发起的链接被esxi和vcenter ...
 - ios-多语言版本开发(三)(转载)
			
写在前面 iOS 多语言版本的开发(二)中我们实现了如何让用户自己去切换系统语言的功能,我们还写了Demo 以供辅助学习:但是,继以上两篇文章都是建立在项目刚刚启动或启动不久,项目中存在的中文字符串 ...
 - Callable接口解析
			
1.接口的定义: public interface Callable<V> { V call() throws Exception; } 2.Callable和Runnable的异同 先看 ...
 - scp sparkuser@spark02:/home/sparkuser/.ssh
			
文件计算机传送 命令格式:{scp} {计算机用户}@{计算机网络名称}:{目标计算机路径} scp sparkuser@spark02:/home/sparkuser/.ssh
 - sass的@at-root
			
一.首先理解sass的嵌套中 &表示是什么? &表示整个选择器,而不单个class属性值或id属性值或tagName.例如下面一段代码: .a { .b { & { color ...
 - 8 jmeter之集合点
			
集合点:集合点用以同步虚拟用户,以便恰好在同一时刻执行任务.在测试计划中,可能会要求系统能够承受1000 人同时提交数据,在LoadRunner 中可以通过在提交数据操作前面加入集合点,这样当虚拟用户 ...