mirror of
https://gitee.com/layui/layui.git
synced 2025-04-05 17:38:02 +08:00
fix(lay): 修复 IE8-10 中 lay.off 无法解除 lay.on 绑定的事件的问题 (#1964)
* fix(lay): 修复 IE8-10 中 lay.off 无法解除 lay.on 绑定的事件的问题 * update code * update
This commit is contained in:
parent
ea1693dd32
commit
537748e499
@ -617,6 +617,65 @@
|
|||||||
targetElem.addEventListener('touchstart', onStart);
|
targetElem.addEventListener('touchstart', onStart);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @type {(elem: Element|Document|Window,eventName: string,fn:EventListenerOrEventListenerObject,options: boolean | AddEventListenerOptions) => any}*/
|
||||||
|
lay.addEvent = function(){
|
||||||
|
if(document.addEventListener){
|
||||||
|
return function(elem, eventName, fn, options){
|
||||||
|
elem.addEventListener(eventName, fn, options);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
return function(elem, eventName, fn){
|
||||||
|
var prefix = '_lay_on_';
|
||||||
|
var eventsCacheName = prefix + eventName;
|
||||||
|
var listener = function(e){
|
||||||
|
e.target = e.srcElement;
|
||||||
|
fn.call(elem, e);
|
||||||
|
}
|
||||||
|
listener._rawFn = fn;
|
||||||
|
if(!elem[eventsCacheName]){
|
||||||
|
elem[eventsCacheName] = [];
|
||||||
|
}
|
||||||
|
var include = false;
|
||||||
|
lay.each(elem[eventsCacheName], function(_, listener){
|
||||||
|
if(listener._rawFn === fn){
|
||||||
|
include = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if(!include){
|
||||||
|
elem[eventsCacheName].push(listener);
|
||||||
|
elem.attachEvent('on' + eventName, listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}();
|
||||||
|
|
||||||
|
/** @type {(elem: Element|Document|Window,eventName: string,fn:EventListenerOrEventListenerObject,options: boolean | EventListenerOptions) => any}*/
|
||||||
|
lay.removeEvent = function(){
|
||||||
|
if(document.removeEventListener){
|
||||||
|
return function(elem, eventName, fn, options){
|
||||||
|
elem.removeEventListener(eventName, fn, options);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
return function(elem, eventName, fn){
|
||||||
|
var prefix = '_lay_on_';
|
||||||
|
var eventsCacheName = prefix + eventName;
|
||||||
|
var events = elem[eventsCacheName];
|
||||||
|
if(layui.isArray(events)){
|
||||||
|
var newEvents = [];
|
||||||
|
lay.each(events, function(_, listener){
|
||||||
|
if(listener._rawFn === fn){
|
||||||
|
elem.detachEvent('on'+ eventName, listener);
|
||||||
|
}else{
|
||||||
|
newEvents.push(listener);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
elem[eventsCacheName] = newEvents;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}();
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* lay 元素操作
|
* lay 元素操作
|
||||||
@ -784,21 +843,16 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 事件绑定
|
// 事件绑定
|
||||||
Class.fn.on = function(eventName, fn){
|
Class.fn.on = function(eventName, fn, options){
|
||||||
return this.each(function(index, item){
|
return this.each(function(index, item){
|
||||||
item.attachEvent ? item.attachEvent('on' + eventName, function(e){
|
lay.addEvent(item, eventName, fn, options)
|
||||||
e.target = e.srcElement;
|
|
||||||
fn.call(item, e);
|
|
||||||
}) : item.addEventListener(eventName, fn, false);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// 解除事件
|
// 解除事件
|
||||||
Class.fn.off = function(eventName, fn){
|
Class.fn.off = function(eventName, fn, options){
|
||||||
return this.each(function(index, item){
|
return this.each(function(index, item){
|
||||||
item.detachEvent
|
lay.removeEvent(item, eventName, fn, options)
|
||||||
? item.detachEvent('on'+ eventName, fn)
|
|
||||||
: item.removeEventListener(eventName, fn, false);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user