说明:
Internet Explorer 8 及更早IE版本不支持 addEventListener() 方法,Opera 7.0 及 Opera 更早版本也不支持。 但是,对于这些不支持该函数的浏览器,你可以使用 attachEvent() 方法来添加事件句柄。
Internet Explorer 8 及更早IE版本不支持 removeEventListener() 方法,Opera 7.0 及 Opera 更早版本也不支持。 但是,对于这些不支持该函数的浏览器,你可以使用 detachEvent() 方法来移除由 attachEvent() 方法添加的事件句柄 。
(以上摘自菜鸟教程)。
关键字:
addEventListener,attachEvent,removeEventListener,detachEvent
JS工具类代码:
$(function() {
//添加,移除监听事件,考虑兼容性
$.fn.extend({
/**
* 参考原生JavaScript添加事件监听,
* element.addEventListener(event, function, useCapture)
* @param {Object} type 必须。事件名
* @param {Object} handle 必须。指定要事件触发时执行的函数
* @param {Object} bool 可选。布尔值,指定事件是否在捕获或冒泡阶段执行
*/
addEvent: function(type, handle, bool) {
var el, thisLen = this.length;
bool ? bool = bool : bool = false; //bool
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);
}
}
},
/**
* 参考原生JavaScript移除事件监听,
* element.removeEventListener(event, function, useCapture)
* @param {Object} type 必须。事件名
* @param {Object} handle 必须。指定要移除的函数
* @param {Object} bool 可选。布尔值,指定事件是否在捕获或冒泡阶段执行
*/
removeEvent:function(type,handle,bool){
var el, thisLen = this.length;
console.log(this)
bool ? bool = bool : bool = false; //bool
if(thisLen == 1) {
el = this[0]; //jquery对象转成 js对象
console.log(el.removeEventListener)
el.removeEventListener ? el.removeEventListener(type, handle, bool) :
el.detachEvent('on' + type, handle);
} else {
for(var i = 0; i < thisLen; i++) {
el = this[i];
el.removeEventListener ? el.removeEventListener(type, handle, bool) :
el.detachEvent('on' + type, handle);
}
}
}
})
})
调用:
$('#main').addEvent('touchstart',start);