2019独角兽企业重金招聘Python工程师标准>>>
一般我们在JS中添加事件,是这样子的
这种绑定事件的方式,兼容主流浏览器,但如果一个元素上添加多次同一事件呢?
如果这样写,那么只有最后绑定的事件,这里是method3会被执行,这个时候我们就不能用onclick这样的写法了,主角改登场了,在IE中我们可以使用attachEvent方法
1
|
//object.attachEvent(event,function);
|
2
|
btn1Obj.attachEvent("onclick",method1);
|
3
|
btn1Obj.attachEvent("onclick",method2);
|
4
|
btn1Obj.attachEvent("onclick",method3);
|
使用格式是前面是事件类型,注意的是需要加on,比如onclick,onsubmit,onchange,执行顺序是
method3->method2->method1
可惜这个微软的私人方法,火狐和其他浏览器都不支持,幸运的是他们都支持W3C标准的addEventListener方法
1
|
//element.addEventListener(type,listener,useCapture);
|
2
|
btn1Obj.addEventListener("click",method1,false);
|
3
|
btn1Obj.addEventListener("click",method2,false);
|
4
|
btn1Obj.addEventListener("click",method3,false);
|
执行顺序为method1->method2->method3
做前端开发工程师,最悲剧的某过于浏览器兼容问题了,上面有两种添加事件的方法,为了同一添加事件的方法,我们不得不再重新写一个通用的添加事件函数,幸亏再有前人帮我们做了这件事
01
|
functionaddEvent(elm, evType, fn, useCapture) {
|
02
|
if(elm.addEventListener) {
|
03
|
elm.addEventListener(evType, fn, useCapture);//DOM2.0
|
06
|
elseif(elm.attachEvent) {
|
07
|
varr = elm.attachEvent(‘on‘ + evType, fn);//IE5+
|
11
|
elm['on'+ evType] = fn;//DOM 0
|
下面是Dean Edwards 的版本
01
|
functionaddEvent(element, type, handler) {
|
03
|
if(!handler.$$guid) handler.$$guid = addEvent.guid++;
|
05
|
if(!element.events) element.events = {};
|
06
|
//为每一个"元素/事件"对创建一个事件处理程序的哈希表
|
07
|
varhandlers = element.events[type];
|
09
|
handlers = element.events[type] = {};
|
11
|
if(element["on"+ type]) {
|
12
|
handlers[0] = element["on"+ type];
|
16
|
handlers[handler.$$guid] = handler;
|
17
|
//指派一个全局的事件处理函数来做所有的工作
|
18
|
element["on"+ type] = handleEvent;
|
22
|
functionremoveEvent(element, type, handler) {
|
24
|
if(element.events && element.events[type]) {
|
25
|
deleteelement.events[type][handler.$$guid];
|
28
|
functionhandleEvent(event) {
|
31
|
event = event || fixEvent(window.event);
|
33
|
varhandlers =this.events[event.type];
|
36
|
this.$$handleEvent = handlers[i];
|
37
|
if(this.$$handleEvent(event) ===false) {
|
44
|
functionfixEvent(event) {
|
46
|
event.preventDefault = fixEvent.preventDefault;
|
47
|
event.stopPropagation = fixEvent.stopPropagation;
|
50
|
fixEvent.preventDefault =function() {
|
51
|
this.returnValue =false;
|
53
|
fixEvent.stopPropagation =function() {
|
54
|
this.cancelBubble =true;
|
功能非常强悍,解决IE的this指向问题,event总是作为第一个参数传入,跨浏览器就更不在话下。
最后贡献一个HTML5工作组的版本:
01
|
varaddEvent=(function(){
|
02
|
if(document.addEventListener){
|
03
|
returnfunction(el,type,fn){
|
05
|
for(vari=0;i<el.length;i++){
|
06
|
addEvent(el[i],type,fn);
|
09
|
el.addEventListener(type,fn,false);
|
13
|
returnfunction(el,type,fn){
|
15
|
for(vari=0;i<el.length;i++){
|
16
|
addEvent(el[i],type,fn);
|
19
|
el.attachEvent(‘on‘+type,function(){
|
20
|
returnfn.call(el,window.event);
|
可能细心的读者发现了IE的attachEvent和W3C标准的addEventListener绑定多个事件的执行顺序是不一样的
- js 添加事件 attachEvent 和 addEventListener 的用法
一般我们在JS中添加事件,是这样子的 obj.οnclick=method 这种绑定事件的方式,兼容主流浏览器,但如果一个元素上添加多次同一事件呢? obj.οnclick=method1; obj. ...
- js添加事件 attachEvent 和addEventListener的用法
一般我们在JS中添加事件,是这样子的: obj.onclick = method 这种绑定事件的方式,兼容主流浏览器,但是如果一个元素上添加多次同一个事件呢??? obj.onclick = meth ...
- js 添加事件 attachEvent 和 addEventListener 的区别
1.addEventListener 适用w3c标准方法addEventListener绑定事件,如下,事件的执行顺序和绑定顺序一致,执行顺序为method1->method2->met ...
- js: 添加事件监听addEventListener、移除事件监听removeEventListener
文档 https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener https://developer.m ...
- js添加事件、移除事件、阻止冒泡、阻止浏览器默认行为等写法(兼容IE/FF/CHROME) 转载...
js添加事件.移除事件.阻止冒泡.阻止浏览器默认行为等写法(兼容IE/FF/CHROME) 网上有关这方面的代码比较多而乱,这里整理一下并加以改进. 添加事件 01 var addEvent = ...
- JS添加事件和解绑事件:addEventListener()与removeEventListener()
作用: addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作. 它们都接受3个参数:事件名.事件处理的函数和布尔值. 布尔值参数是true ...
- js常用对象:点击、双击、onload事件、鼠标相关、onblur事件和onfocus事件等;通过循环给多个元素添加事件、通过addEventListener() 方法 监听事件函数...
1.通过标签内部添加事件 (1)onclick事件:单击事件 (2)ondbclick事件:双击事件 (3)onload事件:只能在body中使用,入口函数里有:window. .οnlοad=f ...
- js滚动条事件监听addEventListener、removeEventListener不生效
//移除监听需要满足 需要移除的事件类型必须是一样的, 比如: click 需要从目标事件移除的 EventListener 函数必须和 addEventListener 中注册的是同一个, 也就是说 ...
- JS事件汇总,addEventListener添加事件监听
JS事件汇总 JavaScript 事件 JS事件汇总 鼠标事件 键盘事件 表单事件 读取事件 onload与onpageshow事件区别 其它事件 addEventListener()添加事件监听 ...