(二)原生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() 描述:为匹配的元素集 ...
随机推荐
- shell中的declare命令
declare命令有如下选项: -a 声明一个数组 -i 声明一个整型 -f 打印所有函数定义 -F 仅打印函数名字 -r 声明一个readonly变量,该变量的值无法改变,并且不能为unset -x ...
- hdu 1711 Number Sequence(KMP模板题)
我的第一道KMP. 把两个数列分别当成KMP算法中的模式串和目标串,这道题就变成了一个KMP算法模板题. #include<stdio.h> #include<string.h> ...
- HTML元素遮挡Flash之梦
wmode参数: transparent模式:可用z-index控制层级 opaque模式:可用z-index控制层级 window模式:flash层级在浏览器核心显示窗口之上,flash会盖住与他重 ...
- HTML&CSS基础学习笔记1.3-HTML的标签语法
HTML标签语法 1. 标签由英文尖括号<和>括起来,如<html>就是一个标签. 2. HTML中的标签一般都是成对出现的,分开始标签和结束标签.结束标签比开始标签多了一个/ ...
- C++得到最大的int值
要得到最大的int值: 1.利用(unsigned int)-1,这样得到的就是unsigned int表示的最大值. 2.int值只是比unsigned int多一位符号位,所以对(unsigned ...
- Flask Jinjia2 与 react
Jinjia2 这是flask使用的模板工具,利用render_template方法可以方便的将后端的数据传给前端. 但是如果要使用react呢. 我如果在jsx中直接使用{{}}是不能输出变量的. ...
- C语言初学 计算三角形面积问题
#include<stdio.h> #include<math.h> #include<stdlib.h> int main() { float a,b,c,s,a ...
- C语言之链表————(转载)
#include <stdio.h>#include <malloc.h>#define LEN sizeof(struct student) /*-------------- ...
- Hibernate学习笔记--核心编程
参考资料:Java Web核心框架 http://blog.csdn.net/lsh6688/article/details/7611950 补充:ThreadLocal的使用:http://www. ...
- 直播 linux上的第一个c++程序
这里用crt来直播吧: 登录到服务器上之后: 1.mkdir -p 建一个文件夹 2.ll 查看一下这个文件夹 3.cd 进入这个文件夹 4.vim 进行文本编辑 写完之后,按下esc中止输入模式,用 ...