前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版

JavaScript中三种绑定事件的方式与去除绑定

首页2016-07-27 11:40:43Front-End
JavaScript
  • 绑定事件的第1种办法:
    • 函数写在结构层里面
    • 非常不好,使页面很混乱,行为与结构得不到分离
<input type="button" onclick="func();">
@前端进阶之旅: 代码已经复制到剪贴板

  • 绑定事件的第2种办法
    • 好处:行为与结构开始分离

    • 缺点:

      • 第二种绑定方式中
      • 只能给一个时间绑定一个处理函数
      • 即.onclick = fn1;.onclick = fn2 最终的效果是onclick = fn2
<select name="xueli" >
	<option value="">请选择学历</option>
	<option value="大学" >大学</option>
	<option value="中学">中学</option>
	<option value="初中">初中</option>	
	<option value="小学">小学</option>	
</select>

<form action="">
	<p>Email:<input type="text" name="email">
	  姓名:<input type="text" name="ming" >

	 </p>
</form>
@前端进阶之旅: 代码已经复制到剪贴板

document.getElementsByTagName('select')[0].onclick= function (){
 	 alert('嘻嘻');

 }

document.getElementsByName('email')[0].onblur=function (){
	alert('哈哈哈');

}
@前端进阶之旅: 代码已经复制到剪贴板
window.onload = function(){
		var d = document.getElementById('school');
		function fn1(){
			alert('hello');
		}
		function fn2(){
			alert('world');
		}

		d.onclick = fn1;//赋值操作 最终显示fn2
		d.onclick = fn2;
}

@前端进阶之旅: 代码已经复制到剪贴板

  • 绑定事件的第3种办法
//错误写法1
window.onload = function(){
		var d = document.getElementById('school');
		function fn1(){//this此时指向window
			this.style.background = 'blue';
		}
		function fn2(){//this此时指向window
			this.style.background = 'red';
		}
		//写一个匿名函数
		//最终的出现错误
		d.onclick = function (){
			fn1();
			fn2();
			//fn1 fn2是属性window的 实际上是这样 window.fn1() window.fn2()
			
			
		}

}
@前端进阶之旅: 代码已经复制到剪贴板

下面这种写法没有问题 但是给DOM树额外增加了两个变量


window.onload = function(){
		var d = document.getElementById('school');
		d.fn1 = function (){//fn1是d的属性 最终this此时指向DOM对象
			this.style.background = 'blue';
		}
		d.fn2 = function (){//this此时指向DOM对象
			this.style.background = 'red';
		}
		
		//匿名函数 调用上面两个函数
		d.onclick = function (){
			this.fn1();
			this.fn2();

		}

}
@前端进阶之旅: 代码已经复制到剪贴板

不在使用onclick

window.onload = function(){
		var d = document.getElementById('school');
		//达到了一次绑定两个函数
		d.addEventListener('click',function () {alert('blue');this.style.background ='blue'});
		d.addEventListener('click',function () {alert('red');this.style.background ='red'});
		

}


@前端进阶之旅: 代码已经复制到剪贴板

去除绑定 不能用匿名函数 匿名函数 当时产生 当时消失

var fn1 = function () {alert('blue');this.style.background ='blue'};
var fn2 = function () {alert('red');this.style.background ='red'};

		
function adde(){
			var d = document.getElementById('school');

			d.addEventListener('click',fn1);
			d.addEventListener('click',fn2);

		}

function reme(){
	var d = document.getElementById('school');

	//d.removeEventListener('click',fn1);//只剩fn1
	d.removeEventListener('click',fn2);
}

@前端进阶之旅: 代码已经复制到剪贴板
  • 在IE下第三种绑定事件的方法
<div id="school">
		
	</div>
	<input type="button" value="加事件" onclick="adde();">
	<input type="button" value="减事件" onclick="reme();">
@前端进阶之旅: 代码已经复制到剪贴板
var fn1 = function () {alert('blue');this.style.background ='blue'};
var fn2 = function () {alert('red');this.style.background ='red'};

		
function adde(){
			var d = document.getElementById('school');

			// IE6,7是后绑定的事件先发生
			d.attachEvent('onclick',fn1);
			d.attachEvent('onclick',fn2); //fn2先发生

		}

function reme(){
	var d = document.getElementById('school');

	//d.deltachEvent('click',fn1);//只剩fn1
	d.deltachEvent('click',fn2);
}

@前端进阶之旅: 代码已经复制到剪贴板
fe

← JavaScript与Unicode编码JavaScript之IE,火狐兼容事件对象 →