>웹 프론트엔드 >JS 튜토리얼 >AttachEvent function_javascript 기술을 사용할 때 바인딩된 요소를 가리키는 문제를 해결하는 방법

AttachEvent function_javascript 기술을 사용할 때 바인딩된 요소를 가리키는 문제를 해결하는 방법

WBOY
WBOY원래의
2016-05-16 19:10:461244검색

AttachEvent를 사용하여 동일한 이벤트를 여러 번 바인딩하는 것은 충돌하는 이벤트 함수 정의를 해결하는 중요한 방법입니다. 그러나 IE에서는 함수의 this 포인터가 바인딩된 요소가 아니라 함수 객체를 가리키며, 애플리케이션에서는 로컬 변수를 사용하여 요소를 전송하려고 하면 클로저 오류가 발생합니다. . 메모리 누수. 그렇다면 이 문제를 어떻게 해결해야 할까요?

Function에 프로토타입 메소드 "bindNode"를 추가했습니다. 이 메소드에서는 전달된 요소를 기반으로 전역 저장소 변환을 수행한 후 캡슐화된 함수를 반환하고 호출 메소드를 사용하여 소유자 변환을 수행합니다. .








<script> <BR>if(!document.all){ <BR> HTMLElement.prototype.attachEvent=function(sType,foo){ <BR> this.addEventListener(sType.slice(2),foo,false) <BR> } <BR>} <BR>Function.prototype.bindNode=function(oNode){ <BR> var foo=this,iNodeItem <br><br> //使用了全局数组__bindNodes,通过局部变量iNodeItem进行跨函数传值,如果直接传送oNode,也将造成闭包 <BR> if(window.__bindNodes==null) <BR> __bindNodes=[] <BR> __bindNodes.push(oNode) <BR> iNodeItem=__bindNodes.length-1 <BR> oNode=null <BR> return function(e){ <BR> foo.call(__bindNodes[iNodeItem],e||event) <BR> } <BR>} <BR>abc() <BR>function abc(){ <BR> var bt=document.getElementById("btTest") <BR> bt.attachEvent("onclick",function(){ <br><br> //如果不经过bindNode处理,下面的结果将是undefined <BR> alert(this.tagName) <BR> }.bindNode(bt)) <BR> bt=null <BR>} <BR></script>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.