JavaScript事件绑定 javascript
本文介绍一些JavaScript事件绑定的经常使用方法及其优缺点,同时在最后展现一个由 Dean Edwards 写的一个比较完美的事件绑定方案。 html
element.onclick = function(e){ // ... };
element.addEventListener('click', function(e){ // ... }, false);
element.attachEvent('onclick', function(){ // ... });
function addEvent(elementment, type, handler) { // 为每一个事件处理函数赋予一个独立的ID if(!handler.$$guid) handler.$$guid = addEvent.guid++; // 为元素创建一个事件类型的散列表 if(!elementment.events) elementment.events = {}; // 为每对元素/事件创建一个事件处理函数的散列表 var handlers = elementment.events[type]; if(!handlers) { handlers = elementment.events[type] = {}; // 存储已有的事件处理函数(若是已存在一个) if(elementment["on" + type]) { handlers[0] = elementment["on" + type]; } } // 在散列表中存储该事件函数 handlers[handler.$$guid] = handler; // 赋予一个全局事件处理函数来出来全部工做 elementment["on" + type] = handleEvent; } // 建立独立ID的计数器 addEvent.guid = 1; function removeEvent(elementment, type, handler) { // 从散列表中删除事件处理函数 if(elementment.events && elementment.events[type]) { delementte elementment.events[type][handler.$$guid]; } } function handleEvent(event) { var returnValue = true; // 获取事件对象(IE使用全局的事件对象) event = event || fixEvent(window.event); // 获取事件处理函数散列表的引用 var handlers = this.events[event.type]; // 依次执行每一个事件处理函数 for(var i in handlers) { this.$$handerEvent = handlers[i]; if(this.$$handlerEvent(event) === fasle) { returnValue = false; } } return returnValue; } // 增长一些IE事件对象缺少的方法 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; }