(一)原生JS实现 - 事件类方法

事件处理 - 添加事件

1 var addEventHandler = function (oTarget, sEventType, fnHandler) {
2     if (oTarget.addEventListener) {
3         oTarget.addEventListener(sEventType, fnHandler, false);
4     } else if (oTarget.attachEvent) {
5         oTarget.attachEvent("on" + sEventType, fnHandler);
6     } else {
7         oTarget["on" + sEventType] = fnHandler;
8     }
9 };

事件处理 - 移除事件

1 var removeEventHandler = function (oTarget, sEventType, fnHandler) {
2     if (oTarget.removeEventListener) {
3         oTarget.removeEventListener(sEventType, fnHandler, false);
4     } else if (oTarget.detachEvent) {
5         oTarget.detachEvent("on" + sEventType, fnHandler);
6     } else {
7         oTarget["on" + sEventType] = null;
8     }
9 };

事件处理 - Bind

1 var BindAsEventListener = function(object, fun) {
2     var args = Array.prototype.slice.call(arguments).slice(2);
3     return function(event) {
4         return fun.apply(object, [event || window.event].concat(args));
5     }
6 };

使用:

 1 var Test = function(){
 2     this.init();
 3 );
 4 Test.prototype = {
 5     init:function(){
 6         this.name = ‘test‘;
 7         this.btn = document.getElementById(‘test‘);
 8         this._fC = BindAsEventListener(this, this._doClick,‘bind event‘);
 9         addEventHandler(this.btn, "click", this._fC );
10     },
11     _doClick:funtion(e,str){
12         e.preventDefault();
13         alert(this.name + ‘ ‘ +str);
14     },
15     destory:function(){
16         removeEventHandler(this.btn, "click", this._fC );
17     }
18 }

事件代理

 1 var Delegate = function (parent,eventType, selector, fn , that){
 2     eventType = eventType || ‘click‘;
 3     if(!parent){
 4         return;
 5     }
 6     if( typeof fn !== ‘function‘){
 7         return;
 8     }
 9     if( typeof selector !== ‘string‘){
10         return;
11     }
12     var handle = function (e){
13         var evt = window.event ? window.event : e;
14         var target = evt.target || evt.srcElement;
15         target = getDlgElement(target);
16         if(target){
17             fn.call(that,{target:target,event:e});
18         }
19     };
20     var getDlgElement = function(ele){
21         if(!ele){
22             return null;
23         }
24         return ( (ele.id === selector) ||
25             (ele.className && ele.className.indexOf(selector) != -1)) ? ele : getDlgElement(ele.parentNode);
26     };
27     parent[‘on‘ + eventType] = handle;
28 };

使用:

 1 var Test2 = function(){
 2     this.init();
 3 };
 4 Test2.prototype = {
 5     init:function(){
 6         var me = this;
 7         Delegate(document,‘click‘,‘classname‘,function(e){
 8             e.event.preventDefault();
 9             var obj =  e.target;
10             me.setVaule(obj,‘test‘)
11         },this);
12     },
13     setVaule:function(elem,str){
14         elem.setAttribute(‘data-value‘,str);
15     }
16 }          
时间: 2024-10-28 17:25:00

(一)原生JS实现 - 事件类方法的相关文章

原生js阻止事件冒泡代码实例

原生js阻止事件冒泡代码实例:关于什么是事件冒泡这里就不多介绍了,可以参阅javascript事件冒泡简单介绍一章节,任何现象都是双刃剑,有时候利用事件冒泡能够带来便利性,但是有时候也会带来不便,下面就通过带来实例介绍一下如何阻止事件冒泡现象.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" conte

JS里关于事件的常被考察的知识点:事件流、事件广播、原生JS实现事件代理

1.JS里面的事件流 DOM2级事件模型中规定了事件流的三个阶段:捕获阶段.目标阶段.冒泡阶段,低版本IE(IE8及以下版本)不支持捕获阶段 捕获事件流:Netscape提出的事件流,即事件由页面元素接收,逐级向下,传播到最具体的元素. 冒泡事件流:IE提出的事件流,即事件由最具体的元素接收,逐级向上,传播到页面. 关于js事件,这里有一篇非常详细的介绍,可以看下:http://www.cnblogs.com/hyaaon/p/4630128.html 2.IE和W3C不同绑定事件解绑事件的方法

(一)原生JS实现 - 基本类方法

类 1 var Class = { 2 create: function() { 3 return function() { 4 this.initialize.apply(this, arguments); } 5 } 6 }; 对象扩展 1 var Extend = function(destination, source) { 2 for (var property in source) { 3 destination[property] = source[property]; 4 } 5

原生js实现淘宝图片切换

这个淘宝图片切换具体效果就是:鼠标移上底部一行中的小图片,上面大图片区域就会显示对应的图片. gif图片看起来还挺酷的,其实实现很简单,用原生js绑定事件改变大图片区域的src. 上代码,html部分的代码: 1 <div class="picture-big"><img src="img/02big.jpg" width="360" height="360" id="pic" />

vue.js阻止事件冒泡和默认事件

首先我们来看原生JS取消事件冒泡方法: e.stopPropagation(); //非IE浏览器window.event.cancelBubble = true; //IE浏览器 原生JS阻止默认事件方法: e.preventDefault(); //非IE浏览器window.event.returnValue = false; //IE浏览器 而vue.js给我们提供了更简便的方法,我们可以通过function($event)来获取事件对象,$event.target则是选择发生事件的目标元

原生js自动触发事件

熟悉jquery的童鞋都知道在jq中有一个方法可以自动触发事件,那就是trigger(),那么通过原生js又怎么模拟触发呢? js中添加一个主动触发事件的方法有dispatch.该方法能模拟用户行为,如点击(click)操作等. 标准使用dispatchEvent方法,IE6/7/8则使用fireEvent方法. dispatchEvent() 方法给节点分派一个合成事件. 语法如下: dispatchEvent(eventObj) eventObj 参数是一个描述事件的 ActionScrip

原生js怎么为动态生成的标签添加各种事件

这几天用zepto.js写了不少事件,突然想到一个问题,那就是原生的js如何给动态生成的标签添加事件?因为这些标签都是后来通过ajax或者运行其他点击事件生成的,那么如果之前给他们写事件他们这个dom对象是找不到的,jq通过事件委托解决了这个问题,但是原生js这个问题该怎么解决呢?我在网上查了很多资料,好像只有一种办法,那就是在生成标签并把标签添加到html结构中后再添加对于这个新标签的各种事件,如果有更好的方法,欢迎提出来. <!DOCTYPE html> <html lang=&qu

原生js跨浏览事件绑定(移除)/javascript事件绑定(移除)

网上找了半天没看到,都是基于ie attachEvent(有诸多的问题存在)来写的,所以手动写了个js模拟绑定事件希望能帮到需要的童鞋 addEvent = function(obj,type,fn){  if(obj.addEventListener) {//W3C   obj.addEventListener(type,fn,false);  }else if (obj.attachEvent) {//ie(期待它的灭亡)   if(!obj.events) obj.events = {};

原生js监听input值改变事件

哈哈哈,又来了,今天闲来无事,实验了下原生js监听input value值改变事件,下面就来说道说道: 本来写监听input值便获是用jquery的,之前的随笔写了,就是这个方法,地址:http://www.cnblogs.com/wteng/p/5434403.html $('input').bind('input propertychange', function() { //to do }) 现在用原生js来实现一遍(其实我翻了下jquery的监听事件on的源码,没找到不知道他写哪了),本