2011-04-17 118 views
2

如何基於名稱(例如click)測試事件是否爲瀏覽器事件(例如clickload,blur等)? (和沒有我不使用jQuery/mootools的/樣機/道場)如何檢測事件是否爲瀏覽器事件

UPDATE

在這個函數中附上瀏覽器事件(clickload)例如:

observe: function(elements, eventName, callback) { 
    if (!(elements.length != null)) { 
    elements = [elements]; 
    } 
    return this.each(elements, function(e) { 
    if (helper.hooks.eventObserved != null) { 
     helper.hooks.eventObserved(eventName, callback, e); 
    } 
    if (typeof e === 'string') { 
     e = this.el(e); 
    } 
    if (e.addEventListener) { 
     return e.addEventListener(eventName, callback, false); 
    } else if (e.attachEvent) { 
     return e.attachEvent("on" + eventName, callback); 
    } 
    }); 
}, 

這觸發事件:

fire: function(elements, eventName) { 
    if (!(elements.length != null)) { 
    elements = [elements]; 
    } 
    return this.each(elements, function(e) { 
    var evt; 
    if (document.createEventObject != null) { 
     evt = document.createEventObject(); 
     return e.fireEvent("on" + eventName); 
    } else { 
     evt = document.createEvent('HTMLEvents'); 
     evt.initEvent(eventName, true, true); 
     return !e.dispatchEvent(evt); 
    } 
    }); 
}, 

但我想要測試的事件是否存在,例如click是瀏覽器事件,但login不是那麼我該如何測試?

+3

如果你不使用jQuery/mootools的/樣機/道場,那麼哪來的事件來自何處,如果他們不「瀏覽器事件」? – Pointy 2011-04-17 21:04:11

+0

(注意,我拒絕猜測你是一個Qooxdoo用戶的誘惑) – Pointy 2011-04-17 21:04:28

+0

我在寫我自己的小型JS庫 – errorhandler 2011-04-17 21:05:10

回答

0

你可以檢查,看看是否函數/對象element["on"+event]存在:

<a href="http://www.google.com" id="myAnchor">test</a> 
<script> 

function doesElementHaveEvent(element, event){ 
    return (typeof element["on"+event] != typeof undefined); 
} 

alert(doesElementHaveEvent(document.getElementById("myAnchor"), "click")); // true 
alert(doesElementHaveEvent(document.getElementById("myAnchor"), "login")); // false 
</script>