《DOM事件探秘》笔记

2016-03-10  本文已影响52人  8eeb5fce5842

慕课网 DOM事件探秘 学习笔记

一、事件流

事件冒泡

事件捕获


二、事件处理程序

HTML 事件处理程序

<div onclick="xxx"></div>

DOM0级 事件处理程序

oDiv.onclick = function () {}; // 给oDiv加了一个点击的属性
oDiv.onclick = null; // 删除onclick属性

DOM2级 事件处理程序

IE事件处理程序


三、事件对象

DOM中的事件对象

IE中的事件对象


四、跨浏览器兼容

var eventUtil = {
 // 添加事件
 addHandler: function (element, eventType, handler) {
 if(element.addEventListener) { // DOM2
 element.addEventListener(eventType, handler, false);
 }
 else if(element.attachEvent) { // IE
 element.attachEvent('on' + eventType, handler);
 }
 else { // DOM0
 element['on' + eventType] = handler;
 }
 },
 // 删除事件
 removeHandler: function (element, eventType, handler) {
 if(element.removeEventListener) {
 element.removeEventListener(eventType, handler, false);
 }
 else if(element.detachEvent) {
 element.detachEvent('on' + eventType, handler);
 }
 else {
 element['on' + eventType] = null;
 }
 },
 // 事件对象
 getEvent: function (event) {
 return event ? event :window.event;
 },
 // 事件类型
 getType: function (event) {
 return event.type;
 },
 // 事件目标
 getElement: function (event) {
 return event.target || event.srcElement;
 },
 // 阻止默认行为
 preventDefault: function (event) {
 if(event.preventDefault) {
 event.preventDefault();
 }
 else {
 event.returnValue = false;
 }
 },
 // 阻止事件冒泡
 stopPropagation: function (event) {
 if(event.stopPropagation) {
 event.stopPropagation();
 }
 else {
 event.cancelBubble = true;
 }
 }
};

// 使用时
eventUtil.addHandler(oDiv, 'click', function (ev) {
 ev = eventUtil.getEvent(ev); // 事件对象
 // 或者就直接写 ev = ev || window.event;
 alert(eventUtil.getElement(ev)); // 弹出目标元素
 eventUtil.preventDefault(ev); // 阻止默认行为
 eventUtil.stopPropagation(ev); // 阻止冒泡
});


上一篇 下一篇

猜你喜欢

热点阅读