mirror of https://github.com/layui/layui
fix(lay): 修复 IE8-10 中 lay.off 无法解除 lay.on 绑定的事件的问题 (#1964)
* fix(lay): 修复 IE8-10 中 lay.off 无法解除 lay.on 绑定的事件的问题 * update code * updatepull/1986/head
parent
ea1693dd32
commit
537748e499
|
@ -617,6 +617,65 @@
|
|||
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 元素操作
|
||||
|
@ -784,21 +843,16 @@
|
|||
};
|
||||
|
||||
// 事件绑定
|
||||
Class.fn.on = function(eventName, fn){
|
||||
Class.fn.on = function(eventName, fn, options){
|
||||
return this.each(function(index, item){
|
||||
item.attachEvent ? item.attachEvent('on' + eventName, function(e){
|
||||
e.target = e.srcElement;
|
||||
fn.call(item, e);
|
||||
}) : item.addEventListener(eventName, fn, false);
|
||||
lay.addEvent(item, eventName, fn, options)
|
||||
});
|
||||
};
|
||||
|
||||
// 解除事件
|
||||
Class.fn.off = function(eventName, fn){
|
||||
Class.fn.off = function(eventName, fn, options){
|
||||
return this.each(function(index, item){
|
||||
item.detachEvent
|
||||
? item.detachEvent('on'+ eventName, fn)
|
||||
: item.removeEventListener(eventName, fn, false);
|
||||
lay.removeEvent(item, eventName, fn, options)
|
||||
});
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue