IE8及其以下,特有js event对象坑

简介:

event 对象是 JavaScript 中一个非常重要的对象,用来表示当前事件。event 对象的属性和方法包含了当前事件的状态。

当前事件,是指正在发生的事件;状态,是与事件有关的性质,如 引发事件的DOM元素、鼠标的状态、按下的键等等。

event 对象只在事件发生的过程中才有效。

出现原因:

获取event对象

在 W3C 规范中,event 对象是随事件处理函数传入的,Chrome、FireFox、Opera、Safari、IE9.0及其以上版本都支持这种方式;但是对于 IE8.0 及其以下版本,event 对象必须作为 window 对象的一个属性。

◆ 在遵循 W3C 规范的浏览器中,event 对象通过事件处理函数的参数传入。

语法:
elementObject.OnXXX=function(e){
    var eve=e; // 声明一个变量来接收 event 对象

◆ 对于 IE8.0 及其以下版本,event 必须作为 window 对象的一个属性。

语法:
elementObject.OnXXX=function(){
    var eve=window.event; // 声明一个变量来接收event对象
}

问题便出现于此,因为js代码中封装了一个模拟jquery live,将事件委托到父容器document.body,传递了event,需要委托给控件绑定事件(需要支持ie8,ie真蛋疼):

解决如下:

var eve = event || window.event; //获取事件对象
var objEle = eve.target || eve.srcElement; //获取document 对象的引用


规范如下(参考http://www.itxueyuan.org/view/6340.html):

event 对象常用属性和方法(W3C规范)
属性 描述 IE 非IE W3C
altKey返回当事件被触发时,"ALT" 是否被按下。YesYesYes
button返回当事件被触发时,哪个鼠标按钮被点击。YesYesYes
clientX返回当事件被触发时,鼠标指针的水平坐标。YesYesYes
clientY返回当事件被触发时,鼠标指针的垂直坐标。YesYesYes
ctrlKey返回当事件被触发时,"CTRL" 键是否被按下。YesYesYes
metaKey返回当事件被触发时,"meta" 键是否被按下。NoYesYes
relatedTarget返回与事件的目标节点相关的节点。NoYesYes
screenX返回当某个事件被触发时,鼠标指针的水平坐标。YesYesYes
screenY返回当某个事件被触发时,鼠标指针的垂直坐标。YesYesYes
shiftKey返回当事件被触发时,"SHIFT" 键是否被按下。YesYesYes
bubbles返回布尔值,指示事件是否是起泡事件类型。NoYesYes
cancelable返回布尔值,指示事件是否可拥可取消的默认动作。NoYesYes
currentTarget返回其事件监听器触发该事件的元素。NoYesYes
eventPhase返回事件传播的当前阶段。  Yes
target返回触发此事件的元素(事件的目标节点)。NoYesYes
timeStamp返回事件生成的日期和时间。NoYesYes
type返回当前 Event 对象表示的事件的名称。YesYesYes
方法 描述 IE 非IE W3C
initEvent()初始化新创建的 Event 对象的属性。NoYesYes
preventDefault()通知浏览器不要执行与事件关联的默认动作。NoYesYes
stopPropagation()不再派发事件。NoYesYes

除了上面W3C规范所规定的属性和方法外,IE浏览器还支持以下属性。
event 对象的属性(IE特有)
属性 描述
cancelBubble如果事件句柄想阻止事件传播到包容对象,必须把该属性设为 true。
fromElement对于 mouseover 和 mouseout 事件,fromElement 引用移出鼠标的元素。
keyCode对于 keypress 事件,该属性声明了被敲击的键生成的 Unicode 字符码。对于 keydown 和 keyup 事件,它指定了被敲击的键的虚拟键盘码。虚拟键盘码可能和使用的键盘的布局相关。
offsetX,offsetY发生事件的地点在事件源元素的坐标系统中的 x 坐标和 y 坐标。
returnValue如果设置了该属性,它的值比事件句柄的返回值优先级高。把这个属性设置为 fasle,可以取消发生事件的源元素的默认动作。
srcElement对于生成事件的 Window 对象、Document 对象或 Element 对象的引用。
toElement对于 mouseover 和 mouseout 事件,该属性引用移入鼠标的元素。
x,y事件发生的位置的 x 坐标和 y 坐标,它们相对于用CSS动态定位的最内层包容元素。

愿世间无IE.

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页