主题
事件对象
DOM 事件对象
无论哪种方式(DOM0 或 DOM2)都可以动事件处理程序中获取 event 对象
以下列举一些常用的属性或方法
属性或方法 | 说明 |
---|---|
currentTarget | 返回绑定事件的元素,始终等于 this |
target | 返回触发事件的元素 |
type | 返回触发的事件名 |
preventDefault() | 阻止特定事件的默认行为 |
stopPropagation() | 阻止事件流继续传播,取消后续的捕获或冒泡 |
stopImmediatePropagation() | 阻止事件流继续传播,取消后续的捕获或冒泡,并阻止相同 dom,相同类型事件的触发 |
eventPhase | 返回当前所处的事件流阶段,1:在捕获阶段;2:在目标阶段;3:在冒泡阶段 |
isTrusted | 返回布尔值,是否由真实的用户行为产生 |
IE 事件对象
以 DOM0 方式指定,则 event 保存在 window 上
jselement.onclick = function() { const event = window.event }
以 attachEvent() 指定,则 event 作为唯一参数传给处理函数
jselement.attachEvent('onclick', function(event) {})
以下列举一些常用的属性
属性 | 说明 |
---|---|
srcElement | 返回触发事件的元素,与 DOM 的 target 相同 |
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
}
}
}