EventTarget
        
        
          
                Baseline
                
                  Widely available
                
                 *
              
        
        
        
          
                
              
                
              
                
              
        
        
      
      This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
* Some parts of this feature may have varying levels of support.
EventTarget 介面定義了其實作的物件具有接收事件的能力,也可能擁有處理事件的監聽器。
除了最為常見的 Element、Document 與 Window 繼承或實作了 EventTarget 介面之外,其它的物件還有 XMLHttpRequest、AudioNode、AudioContext⋯ 等等。
許多 EventTarget(包括 Element、Document 和 Window)除了透過 addEventListener() 方法外,還可藉由 DOM 物件的屬性(property)或 HTML 元素屬性(attribute)來設定事件處理器。
方法
- EventTarget.addEventListener()
- 
於 EventTarget物件上註冊指定事件的監聽器。
- EventTarget.removeEventListener()
- 
移除 EventTarget物件上的指定事件監聽器。
- EventTarget.dispatchEvent()
- 
對此 EventTarget物件派送(dispatch)一個事件物件,也就是於此EventTarget物件上觸發一個指定的事件物件實體。
Mozilla chrome code 的額外方法
Mozilla extensions for use by JS-implemented event targets to implement on properties. See also WebIDL bindings.
- void setEventHandler(DOMString type, EventHandler handler) Non-standard
- EventHandler getEventHandler(DOMString type) Non-standard
範例
>Simple implementation of EventTarget
var EventTarget = function () {
  this.listeners = {};
};
EventTarget.prototype.listeners = null;
EventTarget.prototype.addEventListener = function (type, callback) {
  if (!(type in this.listeners)) {
    this.listeners[type] = [];
  }
  this.listeners[type].push(callback);
};
EventTarget.prototype.removeEventListener = function (type, callback) {
  if (!(type in this.listeners)) {
    return;
  }
  var stack = this.listeners[type];
  for (var i = 0, l = stack.length; i < l; i++) {
    if (stack[i] === callback) {
      stack.splice(i, 1);
      return;
    }
  }
};
EventTarget.prototype.dispatchEvent = function (event) {
  if (!(event.type in this.listeners)) {
    return true;
  }
  var stack = this.listeners[event.type];
  event.target = this;
  for (var i = 0, l = stack.length; i < l; i++) {
    stack[i].call(this, event);
  }
  return !event.defaultPrevented;
};
規範
| Specification | 
|---|
| DOM> # interface-eventtarget> | 
瀏覽器相容性
Loading…
參見
- Event reference - the events available in the platform.
- Event developer guide
- Eventinterface