任何事件的触发都会产生event对象
event的使用兼容:
function fn(eve){
// 兼容的写法
var e = window.event || eve;
console.log(e)
}
键盘事件兼容问题:
var eve = event || window.event
var keyCode = eve.keyCode || eve.which
注:
event.whichwhich 属性指示按了哪个键或按钮。
IE只有keyCode属性,FireFox中有which和charCode属性,Opera中有keyCode和which属性,Chrome中有keyCode、which和charCode属性
阻止事件冒泡兼容写法:
通用方法:
event.stopPropagation();
说明:stopPropagation是事件对象Event的一个方法,作用是阻止目标元素事件冒泡到父级元素。
IE浏览器方法:
event.cancelBubble = true;
var e = event || window.event;
// 通用方式阻止冒泡行为
if(e.stopPropagation){
e.stopPropagation();
}else{
// IE浏览器阻止默认行为
e.cancelBubble=true;
}
阻止浏览器默认行为兼容方法:
通用方法:
e.preventDefault();
说明:preventDefault是事件对象Event的一个方法,作用是取消一个目标元素的默认行为。如果元素没有默认行为,调用无效。
IE浏览器方法:
e.returnValue = false;
也可以用 return false;不仅返回值也会停止代码向下执行
// 函数封装
function stopDefault(event) {
var e = event || window.event;
if (e.preventDefault){
e.preventDefault(); // 标准浏览器
}else{
e.returnValue = false; // IE浏览器
}
}
DOM2级事件监听器:
DOM0级事件 就是行内绑定的 DOM1级事件处理程序的名字以on开头,click => onclick、load =>
onload、change => onChange DOM2级事件
ie6、7、8:
1、添加DOM2级:节点对象.attachEvent(事件类型,事件处理)
2、取消DOM2级:节点对象.detachEvent(事件类型,事件处理)
主流浏览器:
1、添加DOM2级:节点对象.addEventListener(事件类型,事件处理,[事件流])
2、取消DOM2级:节点对象.removeEventListener(事件类型,事件处理,[事件流])
1、事件流指从页面中接收事件的顺序,也可理解为事件在页面中传播的顺序,主要是冒泡和捕获.
2、ie6、7、8事件类型需要“on”,主流浏览器不需要“on” 如果设置事件时,明确知道该事件需要取消,这时候只能写有名函数
3、设置事件和取消事件的格式必须一一对应
函数封装:
function addEvent(obj,inci,back){
if(obj.addEventListener){
obj.addEventListener(inci,back);
}else if(obj.attachEvent){
obj.attachEvent("on" + inci,back);
}else{
obj["on"+inci] = back;
}
}
function removeEvent(obj,inci,back){
if(obj.removeEventListener){
obj.removeEventListener(inci,back,false);
}else if(obj.detachEvent){
obj.detachEvent("on" + inci,back);
}else{
obj["on"+inci] = null;
}
}