(二)原生JS实现 - 事件类方法
事件处理 - 添加事件
 var addEventHandler = function (oTarget, sEventType, fnHandler) {
     if (oTarget.addEventListener) {
         oTarget.addEventListener(sEventType, fnHandler, false);
     } else if (oTarget.attachEvent) {
         oTarget.attachEvent("on" + sEventType, fnHandler);
     } else {
         oTarget["on" + sEventType] = fnHandler;
     }
 };
事件处理 - 移除事件
 var removeEventHandler = function (oTarget, sEventType, fnHandler) {
     if (oTarget.removeEventListener) {
         oTarget.removeEventListener(sEventType, fnHandler, false);
     } else if (oTarget.detachEvent) {
         oTarget.detachEvent("on" + sEventType, fnHandler);
     } else {
         oTarget["on" + sEventType] = null;
     }
 };
事件处理 - Bind
 var BindAsEventListener = function(object, fun) {
     var args = Array.prototype.slice.call(arguments).slice(2);
     return function(event) {
         return fun.apply(object, [event || window.event].concat(args));
     }
 };
使用:
 var Test = function(){
     this.init();
 );
 Test.prototype = {
     init:function(){
         this.name = 'test';
         this.btn = document.getElementById('test');
         this._fC = BindAsEventListener(this, this._doClick,'bind event');
         addEventHandler(this.btn, "click", this._fC );
     },
     _doClick:funtion(e,str){
         e.preventDefault();
         alert(this.name + ' ' +str);
     },
     destory:function(){
         removeEventHandler(this.btn, "click", this._fC );
     }
 }
事件代理
 var Delegate = function (parent,eventType, selector, fn , that){
     eventType = eventType || 'click';
     if(!parent){
         return;
     }
     if( typeof fn !== 'function'){
         return;
     }
     if( typeof selector !== 'string'){
         return;
     }
     var handle = function (e){
         var evt = window.event ? window.event : e;
         var target = evt.target || evt.srcElement;
         target = getDlgElement(target);
         if(target){
             fn.call(that,{target:target,event:e});
         }
     };
     var getDlgElement = function(ele){
         if(!ele){
             return null;
         }
         return ( (ele.id === selector) ||
             (ele.className && ele.className.indexOf(selector) != -1)) ? ele : getDlgElement(ele.parentNode);
     };
     parent['on' + eventType] = handle;
 };
使用:
 var Test2 = function(){
     this.init();
 };
 Test2.prototype = {
     init:function(){
         var me = this;
         Delegate(document,'click','classname',function(e){
             e.event.preventDefault();
             var obj =  e.target;
             me.setVaule(obj,'test')
         },this);
     },
     setVaule:function(elem,str){
         elem.setAttribute('data-value',str);
     }
 }          
(二)原生JS实现 - 事件类方法的更多相关文章
- JS里关于事件的常被考察的知识点:事件流、事件广播、原生JS实现事件代理
		1.JS里面的事件流 DOM2级事件模型中规定了事件流的三个阶段:捕获阶段.目标阶段.冒泡阶段,低版本IE(IE8及以下版本)不支持捕获阶段 捕获事件流:Netscape提出的事件流,即事件由页面元素 ... 
- 原生js之事件解绑
		#removeEventListener ##html <button id='btn'>click</button> ##js ###第一种方式(错误方式) var btn ... 
- 原生JS添加事件方法
		事件 事件添加方式 EvenTarget.addEventListener(EvenName, functionName, option); EventName: example => clic ... 
- 原生 JS 绑定事件 移除事件
		监听事件的绑定与移除主要是addEventListener和removeEventListener的运用. addEventListener语法 element.addEventListener(ty ... 
- 原生js 通用事件绑定
		/*原文地址:http://ejohn.org/blog/flexible-javascript-events/*/ http://blog.csdn.net/qi1271199790/article ... 
- (一)原生JS实现 -  基本类方法
		类 var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } ... 
- js自定义事件、DOM/伪DOM自定义事件
		一.说明.引言 我JS还是比较薄弱的,本文的内容属于边学边想边折腾的碎碎念,可能没什么条理,可能有表述不准确的地方,可能内容比较拗口生僻.如果您时间紧迫,或者JS造诣已深,至此您就可以点击右侧广告(木 ... 
- 原生js实现淘宝图片切换
		这个淘宝图片切换具体效果就是:鼠标移上底部一行中的小图片,上面大图片区域就会显示对应的图片. gif图片看起来还挺酷的,其实实现很简单,用原生js绑定事件改变大图片区域的src. 上代码,html部分 ... 
- python 全栈开发,Day55(jQuery的位置信息,JS的事件流的概念(重点),事件对象,jQuery的事件绑定和解绑,事件委托(事件代理))
		一.jQuery的位置信息 jQuery的位置信息跟JS的client系列.offset系列.scroll系列封装好的一些简便api. 一.宽度和高度 获取宽度 .width() 描述:为匹配的元素集 ... 
随机推荐
- uva 371 - Ackermann Functions
			#include <cstdio> int main() { long int F, S, I, Count, Value, Max, J; while(scanf("%ld % ... 
- Javascript获取某个月的天数-简单方法 .(转别人的)
			Javascript里面的new Date("xxxx/xx/xx")这个日期的构造方法有一个妙处,当你传入的是"xxxx/xx/0"(0号)的话,得到的日期 ... 
- ECSTORE导航吸顶功能
			ecstore导航吸顶功能,在导航父元素中加入id,如: <div id="mainNav1"></div> 在footer.html中添加以下js代码: ... 
- jq改变DIV中图片的路径
			<script src="common/jquery.js"></script> <script language="javascript ... 
- linux 下进程状态及进程控制
			系统状态检测及进程控制1,/proc 是系统的一个窗户,可以透视内核2,建议将hosts里localhost,locahost.locadomain 解析为127.0.0.1 把系统域名解决为局域网的 ... 
- iOS学习之页面之间传值的方式总结
			传值三种场景: 1.属性传值(从前往后传) 需求:第二个界面标签显示第一个界面输入框文字. 第一步, 在前一个界面定义属性. (语义属性声明为copy); 第二步, 在进入下一个界面之前,给属性传入数 ... 
- IOS单例模式(Singleton)
			IOS单例模式(Singleton) 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模 ... 
- caffe绘制训练过程的loss和accuracy曲线
			转自:http://blog.csdn.net/u013078356/article/details/51154847 在caffe的训练过程中,大家难免想图形化自己的训练数据,以便更好的展示结果.如 ... 
- web.xml 3.0头部模板
			<?xml version=”1.0″ encoding=”UTF-8″?><web-appversion=”3.0″xmlns=”http://java.sun.com/xml/n ... 
- 转发细节——forward
			1)forward()方法之前的输出,如果是输出到缓冲区,再转发到其它Servlet,那么原缓冲区的数据忽略不计:2)forward()方法之前的输出,如果真正输出到浏览器,再转发到其它Servlet ... 
