重拾Javascript基础(四) - BOM&DOM事件
2012-04-17 18:52 胡炯 阅读(293) 评论(0) 编辑 收藏 举报事件阶段
事件对象
IE存储在window.event,其他浏览器则以参数传入。
this关键字
指向执行事件的节点对象
取消事件冒泡
e.stopPropagation(); window.event.cancelBubble();
重装浏览器的默认行为
e.preventDefault(); window.event.returnValue = false;
绑定事件监听函数
.onevent = function(){}; 优点: 简单、稳定、统一; this指向节点对象。 缺点: 只能在冒泡时执行; 一个节点只能绑定一个事件函数; 参数型事件对象在IE下无。 .addEventListener(eventName, function(){}, true[捕获]|false[冒泡]) 优点: 可以指定捕获或冒泡时执行; this指向节点对象; 可以绑定多个事件函数。 缺点: IE下无用 .attachEvent(eventName, function(){}); 优点: 可以绑定多个函数 缺点: 仅在冒泡时执行; this上下文指向window对象;
// Dean Edwards编写的addEvent/removeEvent function addEvent(element, type, handler) { // 为每个事件处理函数赋予一个独立的ID if(!handler.$$guid) handler.$$guid = addEvent.guid++; // 为元素建立一个事件类型的散列表 if(!element.events) element.events = {}; // 为每对元素/事件建立一个事件处理函数的 var handlers = element.events[type] if(!handlers) { handlers = element.events[type] = {}; if(element['on'+type]) { handlers[0] = element['on'+type]; } } handlers[handler.$$guid] = handler; element['on'+type] = handleEvent; } addEvent.guid = 1; function removeEvent(element, type, handler) { if(element.events && element.events[type]) { delete element.events[type][handler.$$guid]; } } function handleEvent(event) { var returnValue = true; event = event||fixEvent(window.event); var handlers = this.events[event.type]; for(var i in handlers) { this.$$handleEvent = handlers[i]; if(this.$$handleEvent(event) === false) { returnValue = false; } } return returnValue; } function fixEvent(event) { event.preventDefault = fixEvent.preventDefault; event.stopPropagation = fixEvent.stopPropagation; return event; } fixEvent.preventDefault = function() { this.returnValue = false; } fixEvent.stopPropagation = function() { this.cancelBubble = true; }
事件对象
一、 通用属性: 1、类型(type) 当前触发的事件名称 2、目标(target/srcElement) 3、停止冒泡(stopPropagation/cancelBubble) 4、阻止默认行为(preventDefault()/returnValue=false) 二、鼠标属性: 1、相对于窗口的鼠标位置(clientX/clientY) 2、相对于文档的鼠标位置(pageX/pageY) 3、相对于事件目标元素的鼠标位置(layerX/layerY ; offsetX/offsetY) 4、button 点击鼠标按钮数字 5、relateTarget 三、键盘属性: 1、ctrlKey 2、keyCode 3、shiftKey
页面事件
1、load 2、beforeunload 3、error 4、resize 5、srcoll 6、unload
UI事件
1、focus 2、blur
鼠标事件
1、click 2、dbclick 3、mousedown 4、mouseup 5、mousemove 6、mouseover 7、mouseout
键盘事件
1、keypress/keydown 2、keyup
表单事件
1、select 2、change 3、submit 4、reset