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; }