addEventListener和attachEvent介绍, 原生js和jquery的兼容性写法
也许很多同仁一听到事件监听,第一想到的就是原生js的 addEventListener()事件,的确如此,当然如果只是适用于现代浏览器(IE9、10、11 | ff, chorme, safari, opera(非windows系统自带,可安装的Browsers) ),你只需要了解这一个事件的正确拼写和参数就OK啦。
但是小生仅今天要介绍的是 添加事件监听的兼容性写法,所以,如果同仁们无需做兼容的话,建议只是了解或略过 哈/....
首先,介绍一下,事件监听的事件有两个,对,你没听错,是两个:
First: element.addEventListener(event,function(e),useCapture)
适用范围: 现代浏览器(IE9、10、11 | ff, chorme, safari, opera)
参数介绍:
event: 必须。字符串,指定事件名。(注: 不要是 on+'someEvent', just 'someEvent' is ok).
function: 必须。指定要事件触发时执行的函数。
(注:function(e) e:事件对象会作为第一个参数传入函数, 事件对象的类型取决于特定的事件,例如, "click" 事件属于 MouseEvent(鼠标事件) 对象。)
useCapture: 可选。布尔值,指定事件是否在捕获或冒泡阶段执行。
(注:true:function(e) 在捕获阶段执行, false:function(e)在冒泡阶段执行,(默认为 false ).
Second: element.attachEvent(eType,function(e))
适用范围:IE 6、7、8
参数介绍:
eType: 必须。字符串,事件名称,含“on”,比如“onclick”、“onmouseover”、“onkeydown”等。
function:必须。定要事件触发时执行的函数。
详细了解 参考:http://www.jb51.net/article/18220.htm (本人觉得 参数介绍上 比较细)
由于以上两个事件的适用范围有所不同,所以催生了以下的兼容写法(上代码):
1.原生 Javascript 写法:
var EventUtil = {
// 添加事件监听
add: function(element, type, callback){
if(element.addEventListener){
element.addEventListener(type, callback, false);
} else if(element.attachEvent){
element.attachEvent('on' + type, callback);
} else {
element['on' + type] = callback;
}
}
}
使用方式:
var at = document.getElementbyId('atemp');
EventUtil.add(at, 'click', function(){
console.log('被点击了');
});
扩展:
var EventUtil = {
// 添加事件监听
add: function(element, type, callback){
if(element.addEventListener){
element.addEventListener(type, callback, false);
} else if(element.attachEvent){
element.attachEvent('on' + type, callback);
} else {
element['on' + type] = callback;
}
},
// 移除事件监听
remove: function(element, type, callback){
if(element.removeEventListener){
element.removeEventListener(type, callback, false);
} else if(element.detachEvent){
element.detachEvent('on' + type, callback);
} else {
element['on' + type] = null;
}
},
// 跨浏览器获取 event 对象
getEvent: function(event){
return event ? event : window.event;
},
// 跨浏览器获取 target 属性
getTarget: function(event){
return event.target || event.srcElement;
},
阻止事件的默认行为
preventDefault: function(event){
if(event.preventDefault){
event.preventDefault();
} else {
event.returnValue = false;
}
},
// 阻止事件流或使用 cancelBubble
stopPropagation: function(){
if(event.stopPropagation){
event.stopPropagation();
} else {
event.cancelBubble = true;
}
}
};
2.jQuery $.fn.extend 写法(此方法在js方法上进行的 改进,如下)
$.fn.extend({
addEvent:function( type, handle, bool){
var el, thisLen=this.length;
bool?bool=bool:bool=false;
if( thisLen == 1){
el = this[0]; //jquery对象转成 js对象
el.addEventListener ? el.addEventListener(type, handle, bool ):
el.attachEvent('on'+type, handle);
}else {
for( var i=0;i<thisLen;i++ ){
el = this[i];
el.addEventListener ? el.addEventListener(type, handle, bool ):
el.attachEvent('on'+type, handle);
}
}
}
}
使用方式:
$('p').addEvent('click',function(e){ alert(‘哦,我被点啦。。。’); });
扩展:
同上扩展(不再描述)
ok,打完收工!!!
addEventListener和attachEvent介绍, 原生js和jquery的兼容性写法的更多相关文章
- 常用原生JS方法总结(兼容性写法)
经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...
- 【JS】怎样用原生JS实现jQuery的ready方法
Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,只是与window.onload方法还是有差别的. 总的来说,window. ...
- 原生js 与 jQuery对比
1.原生JS与jQuery操作DOM对比 : https://www.cnblogs.com/QianBoy/p/7868379.html 2.比较jQuery与JavaScript的不同功能实 ...
- 【前端性能】必须要掌握的原生JS实现JQuery
很多时候,我们经常听见有人说jquery有多快多快.在这个各种类库满天飞的时候,不得不说的是,能有原生JS快吗? 是的,明显原生JS要更快,因为诸如JQuery这样的库必须要兼容各种浏览器和低版本和许 ...
- JavaScript中函数和类(以及this的使用<重点>,以及js和jquery讲解,原生js实现jquery)
1.javascript中以函数来表示类: 一般函数是小写开头:function foo() 类开头是大写:function Foo() 实例化类: obj = new Foo() 其他属性就同类是一 ...
- 原生js替换jQuery各种方法-中文版
原文https://github.com/nefe/You-D... 原生JS与jQuery操作DOM对比 You Don't Need jQuery 前端发展很快,现代浏览器原生 API 已经足够好 ...
- 原生js和jquery实现图片轮播特效
本文给大家分享的是使用原生JS和JQ两种方法分别实现相同的图片轮播特效,十分的实用,也非常方便大家对比学习原生js和jQuery,有需要的小伙伴可以参考下. 1)首先是页面的结构部分对于我这种左右切换 ...
- 原生js和jquery实现图片轮播特效(转)
本文给大家分享的是使用原生JS和JQ两种方法分别实现相同的图片轮播特效,十分的实用,也非常方便大家对比学习原生js和jQuery,有需要的小伙伴可以参考下. 1)首先是页面的结构部分对于我这种左右切换 ...
- 原生JS和JQuery的区别
1.原生js和jQuery的入口函数加载模式不同 原生js等页面dom加载完成并且图片等资源也加载完成之后才会执行: jQuery则是等页面dom加载完成执行,不会等图片等资源也加载完成: (也就是说 ...
随机推荐
- 【vijos】1789 String(组合计数+奇怪的题)
https://vijos.org/p/1789 我yy了一下发现我的方法没错啊,为嘛才80分..(后来看了题解,噗,还要判断k>n和k=1的情况QAQ 当k=1的时候,答案显然是m^n 当k& ...
- 【BZOJ】2015: [Usaco2010 Feb]Chocolate Giving(spfa)
http://www.lydsy.com/JudgeOnline/problem.php?id=2015 这种水题真没啥好说的.. #include <cstdio> #include & ...
- (转)java中Executor、ExecutorService、ThreadPoolExecutor介绍
转自: http://blog.csdn.net/linghu_java/article/details/17123057 ScheduledThreadPoolExecutor介绍: http:// ...
- jquery动态调整div大小使其宽度始终为浏览器宽度
需要设置宽度为整个浏览器宽度的div,当然我们可以使用相对布局的方式做到这一点,下面是具体实现,大家可以参考下 有时候我们需要设置宽度为整个浏览器宽度的div,当然我们可以使用相对布局的方式做到这一点 ...
- SourceTree --转载 SourceTree大文件上传提示POST git-receive-pack (chunked)相关问题记录
前两天,更新了百度地图的SDK,更新完了通过SourceTree上传到Github 结果提示 :POST git-receive-pack (chunked), 在网上查询之后了解到这个提示的原因是因 ...
- win 8升级win8.1的几个问题
对于习惯了win7来说的小朋友,win8的使用简直有种想砸电脑的冲动啊,特别是玩游戏的小朋友,win8各种bug.对于游戏.咳咳,我只是多说了,我们都是爱学习的好孩子,少玩游戏,少撸.简单说一 ...
- 认识tornado(一)
tornado 源码包中 demos 目录下包含一些示例程序,就从最简单的 helloworld.py 来看一个 tornado 应用程序的代码结构. 完整的实例程序如下: 01 #!/usr/bin ...
- Leetcode-Resotre IP Addresses
Given a string containing only digits, restore it by returning all possible valid IP address combina ...
- [LeetCode] Factorial Trailing Zeros
Well, to compute the number of trailing zeros, we need to first think clear about what will generate ...
- Java日期类:Date和Calendar的使用
总是使用这两个类,总是需要百度.还不如一次全部整理完. 一.介绍: Date 类 Date 表示特定的瞬间,精确到毫秒. 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年 ...