Skip to content

事件对象

DOM 事件对象

无论哪种方式(DOM0DOM2)都可以动事件处理程序中获取 event 对象

以下列举一些常用的属性或方法

属性或方法说明
currentTarget返回绑定事件的元素,始终等于 this
target返回触发事件的元素
type返回触发的事件名
preventDefault()阻止特定事件的默认行为
stopPropagation()阻止事件流继续传播,取消后续的捕获或冒泡
stopImmediatePropagation()阻止事件流继续传播,取消后续的捕获或冒泡,并阻止相同 dom,相同类型事件的触发
eventPhase返回当前所处的事件流阶段,1:在捕获阶段;2:在目标阶段;3:在冒泡阶段
isTrusted返回布尔值,是否由真实的用户行为产生

IE 事件对象

  1. DOM0 方式指定,则 event 保存在 window

    js
    element.onclick = function() {
        const event = window.event
    }
  2. attachEvent() 指定,则 event 作为唯一参数传给处理函数

    js
    element.attachEvent('onclick', function(event) {})

以下列举一些常用的属性

属性说明
srcElement返回触发事件的元素,与 DOMtarget 相同
type返回触发的事件名
returnValue默认 true,设置为 false,可以取消事件默认行为
cancelBubble默认 false,设置为 true,可以取消冒泡

跨浏览器事件对象

js
var EventUtil = {
    addHandler: function(element, type, handler) {
        if (element,addEventListener) {
            element.addEventListener(type, handler, false)
        } else if (element.attachEvent) {
            element.attachEvent('on' + type, handler)
        } else {
            element['on' + type] = handler
        }
    },
    removeHandler: function(element, type, handler) {
        if (element,removeEventListener) {
            element.removeEventListener(type, handler, false)
        } else if (element.detachEvent) {
            element.detachEvent('on' + type, handler)
        } else {
            element['on' + type] = null
        }
    },
    
    getEvent: function(event) {
        return event ? event : window.event
    },
    
    getTarget: function(event) {
        return event.target || event.srcElement
    },
    
    preventDefault: function(event) {
        if (event.preventDefault) {
            event.preventDefault()
        } else {
            event.returnValue = false
        }
    },
    
    stopPropagetion: function(event) {
        if (event.stopPropagation) {
            event.stopPropagation()
        } else {
            event.cancelBubble = true
        }
    }
}