> 웹 프론트엔드 > JS 튜토리얼 > AttachEvent 함수에서 바인딩된 요소를 가리키는 문제를 어떻게 해결합니까? _자바스크립트 기술

AttachEvent 함수에서 바인딩된 요소를 가리키는 문제를 어떻게 해결합니까? _자바스크립트 기술

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-05-16 19:15:27
원래의
975명이 탐색했습니다.

AttachEvent를 사용하여 동일한 이벤트를 여러 번 바인딩하는 것은 충돌하는 이벤트 함수 정의를 해결하는 중요한 방법입니다. 그러나 IE에서는 함수의 this 포인터가 바인딩된 요소가 아니라 함수 객체를 가리키며, 애플리케이션에서는 로컬 변수를 사용하여 요소를 전송하려고 하면 클로저 오류가 발생합니다. . 메모리 누수. 그렇다면 이 문제를 어떻게 해결해야 할까요?
Function에 프로토타입 메소드 "bindNode"를 추가했습니다. 이 메소드에서는 전달된 요소를 기반으로 전역 저장소 변환을 수행한 후 캡슐화된 함수를 반환하고 호출 메소드를 사용하여 소유자 변환을 수행합니다.


[Ctrl A Select All 참고: 외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다
]

[Ctrl A 모두 선택 참고:
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]

폐쇄되지 않습니다 물론 그럴 겁니다. 드립을 사용해 테스트해 보세요

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