【fgm.cc练习4-8】事件练习:封装兼容性添加、删除事件的函数

练习地址:http://www.fgm.cc/learn/lesson4/08.html
在这里插入图片描述

封装:

面向对象的三个基本特征(封装、继承、多态)之一。将现实世界的事物抽象成计算机领域中的对象,具有属性和行为(方法)。这种抽象就是封装。函数(避免全局变量,按需执行,提高代码重用性)就是最简单的封装。
**重要特性:**数据隐藏。正常交互+安全性(“不要告诉我你是怎么做的,做就行。”)
详看:JavaScript的封装

事件处理:

如果用onclick,再写一条,特点就是:会覆盖之前这些的onclick事件。
所以有addEventListener的出现,它不会覆盖之前的事件,但是IE7和IE8没有支持这个方法,另外支持了一个方法attachEvent,实现的功能和addEventListener一样,唯一的区别就是:addEventListener是先添加先执行;而另外一个是后添加先执行。

HTML
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>事件练习:封装兼容性添加、删除事件的函数</title>
	<link rel="stylesheet" type="text/css" href="8_event.css">
</head>
<body>
	<pre>

&lt;script type="text/javascript"&gt;
var EventUtil = {
	addHandler: function (oElement, sEvent, fnHandler) {
		oElement.addEventListener ? oElement.addEventListener(sEvent, fnHandler, false) : oElement.attachEvent("on" + sEvent, fnHandler)	
	},
	removeHandler: function (oElement, sEvent, fnHandler) {
		oElement.removeEventListener ? oElement.removeEventListener(sEvent, fnHandler, false) : oElement.detachEvent("on" + sEvent, fnHandler)
	},
	addLoadHandler: function (fnHandler) {
		this.addHandler(window, "load", fnHandler)
	}
}
&lt;/script&gt;
	</pre>
	<input type="button" value="毫无用处的按钮">
	<input type="button" value="绑定click">
	<input type="button" value="解除绑定">
	<script type="text/javascript" src="8_event.js"></script>
</body>
</html>
css
pre {
	color: green;
	border: 1px dotted black;
	padding-left: 20px;
	background: #EDEDED;
}
input {
	float: left;
	margin-left: 10px;
}
input:nth-of-type(1) {
	margin-left: 520px;
}
JavaScript

考虑兼容性的封装:

// 封装
var EventUtil = {
	addHandler: function(oElement, sEvent, fnHandler) {
		oElement.addEventListener ? oElement.addEventListener(sEvent, fnHandler, false) : oElement.attachEvent("on"+sEvent, fnHandler)
	},
	removeHandler: function (oElement, sEvent, fnHandler) {
		oElement.removeEventListener ? oElement.removeEventListener(sEvent, fnHandler, false) : oElement.detachEvent("on" + sEvent, fnHandler)
	},
	// 给window的load事件添加函数,其实相当于window.onload = function(){} ?
	addLoadHandler: function (fnHandler) {
		this.addHandler(window, "load", fnHandler)
	}
}
EventUtil.addLoadHandler(function(){
	var input = document.getElementsByTagName("input");
	// 其实有点像事件里面还有事件的感觉
	EventUtil.addHandler(input[1],"click",function(){
		EventUtil.addHandler(input[0],"click",fnHandler);
		input[0].value="我可以点击了";
	});

	EventUtil.addHandler(input[2],"click",function(){
		EventUtil.removeHandler(input[0],"click",fnHandler);
		input[0].value="毫无用处的按钮";
	});

	function fnHandler() {
		alert("事件绑定成功!");
	}
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值