2009-08-04 64 views
3

說我使用addEventListener或attachEvent(取決於瀏覽器)向對象添加事件;稍後有可能以編程方式調用這些事件?Javascript - 以編程方式調用事件

的事件處理程序添加/刪除使用這樣一個對象:

var Event = { 
    add: function(obj,type,fn) { 
     if (obj.attachEvent) { 
      obj.attachEvent('on'+type,fn); 
     } else { 
      obj.addEventListener(type,fn,false); 
     } 
    }, 
    remove: function(obj,type,fn) { 
     if (obj.detachEvent) { 
      obj.detachEvent('on'+type,fn); 
     } else { 
      obj.removeEventListener(type,fn,false); 
     } 
    } 
} 

或者我需要存儲每個處理程序的副本,只需要加一個Event.invoke(...)函數?

編輯:此外,jQuery是不是一種選擇:d

回答

1

你無法創建需要做的工作職能,運行從那些事件,然後在需要時運行這些相同功能以後呢?

11

像往常一樣,你必須做的Internet Explorer的一種方式,而對於其他一切;-)

對於IE的正確方法:

document.getElementById("thing_with_mouseover_handler").fireEvent("onmouseover"); 

更多信息,請參見the MSDN library

對於真正的瀏覽器:

var event = document.createEvent("MouseEvent"); 
event.initMouseEvent("mouseover", true, true, window); 
document.getElementById("thing_with_mouseover_handler").dispatchEvent(event); 

需要注意的是,雖然第二,基於標準的方法似乎更囉嗦,也明顯更加靈活:檢查的文件,開始與Mozilla的DOM事件參考https://developer.mozilla.org/en/DOM/event

儘管只與您正在嘗試做的事情相關(它與自定義事件相關,而不是正常事件),Dean Edwards在http://dean.edwards.name/weblog/2009/03/callbacks-vs-events/上有一些示例代碼,值得一看。

相關問題