쓸데없는 소리는 그만하고 샘플 코드만 제공하세요. 코드 복사 코드는 다음과 같습니다. <br> 함수 EventUtil() {<br> var _self = this;<br> ///添加事件<br> var addEvent = (함수 () {<br> if (document.addEventListener) {<br> 반환 함수(el, type, fn) {<br> el.addEventListener(type, fn, false);<br> }<br> } 그 밖의 {<br> 반환 함수(el, type, fn) {<br> el.attachEvent("on" 유형, 함수 () {<br> return fn.call(el, window.event);<br> });<br> }<br> }<br> })();<br> ///添加属性改变事件<br> var addPropertyChangeEvent = 함수(obj, fn) {<br> if (window.ActiveXObject) {<br> obj.onpropertychange = fn;<br> } 그 밖의 {<br> obj.addEventListener("input", fn, false);<br> }<br> }<br> //移除事件<br> var RemoveEvent = 함수(obj, type, fn) {<br> if (obj.removeEventListener) {<br> obj.removeEventListener(type, fn, false);<br> } else if (obj.detachEvent) {<br> obj.detachEvent("on" type, obj["on" type fn]);<br> obj["on" type fn] = null;<br> }<br> }<br> //加载事件<br> var loadEvent = 함수(fn) {<br> var oldonload = window.onload;<br> if (oldonload 유형 != "함수") {<br> window.onload = fn;<br> } 그 밖의 {<br> window.onload = 함수() {<br> oldonload();<br> fn();<br> }<br> }<br> }<br> //阻止事件<br> var stopEvent = 함수 (e) {<br> e = e || window.event;<br> if (e.preventDefault) {<br> e.preventDefault();<br> e.stopPropagation();<br> } else {<br> e.returnValue = false;<br> e.cancelBubble = true;<br> }<br> }<br> //이벤트 버블링을 방지하려는 경우<br> var stopPropagation = 함수 (e) {<br> e = e || window.event;<br> if (! "v1") {<br> e.cancelBubble = true;<br> } else {<br> e.stopPropagation();<br> }<br> }<br> //이벤트 소스 객체 가져오기<br> var getEvent1 = 함수 (e) {<br> e = e || window.event;<br> var obj = e.srcElement ? e.srcElement : e.target;<br> obj 반환;<br> }<br> //이벤트 소스 객체 가져오기<br> var getEvent2 = 함수 (e) {<br> (window.event)가 window.event를 반환하는 경우;<br> var c = getEvent2.caller;<br> 동안(c.caller) {<br> c = c.caller;<br> }<br> 반환 c.인수[0];<br> }<br> //또는 이 기능이 더 강력합니다<br> var getEvent3 = 함수 (e) {<br> var e = e || window.event;<br> if (!e) {<br> var c = this.getEvent3.caller;<br> 동안 (c) {<br> e = c.arguments[0];<br> If (e && (Event == e.constructor || MouseEvent == e.constructor)) {<br> 휴식;<br> }<br> c = c.caller;<br> }<br> }<br> var target = e.srcElement ? e.srcElement : e.target,<br> currentN = target.nodeName.toLowerCase(),<br> parentN = target.parentNode.nodeName.toLowerCase(),<br> grandN = target.parentNode.parentNode.nodeName.toLowerCase();<br> return [e, 대상, 현재N, parentN, grandN];<br> } <p> _self.addEvent = addEvent;<br> _self.addPropertyChangeEvent = addPropertyChangeEvent;<br> _self.removeEvent = 제거이벤트;<br> _self.loadEvent = 로드이벤트;<br> _self.stopEvent = 중지이벤트;<br> _self.stopPropagation = stopPropagation;<br> _self.getEvent1 = getEvent1;<br> _self.getEvent2 = getEvent2;<br> _self.getEvent3 = getEvent3;<br> }<br> var eventUtil = new EventUtil();<br> eventUtil.loadEvent(함수 () {<br> eventUtil.addEvent(document, "click", function (e) {<br> 경고(eventUtil.getEvent3(e));<br> });<br> eventUtil.addPropertyChangeEvent(document,function(e){<br> 경고(eventUtil.getEvent3(e));<br> });<br> });<br> <br> </p> </div> <p>javascript事件处理分为三个阶段:捕获 - 处理 - 起泡。</p> <p>以点击按钮为例:<br> 捕获阶段:由外层到内层,首先调用给Window注册的click捕获阶段监听방법,然后document、body、一层层的父节点,一直到按钮本身。</p> <p>处理阶段: 调用按钮本身을 클릭하여 사용하는 방법입니다.</p> <p>起泡阶段:从按钮开始,从内层到外层,依次调用各级父节点的起泡阶段监听方法,直到Window.</p> <p>但是,对于IE8及更低版本IE,不支持捕获阶段,因此捕获阶段的事件监听目前尚통통하지않습니다.</p> <p>일반적인 사건 처리 방식의 형태:</p> <p></p> <div class="codetitle"> <span><a style="CURSOR: pointer" data="91918" class="copybut" id="copybut91918" onclick="doCopy('code91918')"><u>复主代码</u></a></span> 代码如下:</div> <div class="codebody" id="code91918"> <br> 함수 eventHandler(e) { <br> e = e || 창.이벤트; <br> var target = e.target || e.srcElement; <br> ... ... <br> <br> } <br> </div> <p>e为事件对象,当事件触发时,作为参数传进来,但对于IE8及更低版本IE 不适用,只能过全局的event变访问,好进来会 out 现 同 时 处 两 个 事 件 的情况。</p>