(2) 네이티브 JS 구현 - 이벤트 클래스 방법
11949 단어 js
이벤트 처리 - 이벤트 추가
1 var addEventHandler = function (oTarget, sEventType, fnHandler) {
2 if (oTarget.addEventListener) {
3 oTarget.addEventListener(sEventType, fnHandler, false);
4 } else if (oTarget.attachEvent) {
5 oTarget.attachEvent("on" + sEventType, fnHandler);
6 } else {
7 oTarget["on" + sEventType] = fnHandler;
8 }
9 };
이벤트 처리 - 이벤트 제거
1 var removeEventHandler = function (oTarget, sEventType, fnHandler) {
2 if (oTarget.removeEventListener) {
3 oTarget.removeEventListener(sEventType, fnHandler, false);
4 } else if (oTarget.detachEvent) {
5 oTarget.detachEvent("on" + sEventType, fnHandler);
6 } else {
7 oTarget["on" + sEventType] = null;
8 }
9 };
이벤트 처리 - Bind
1 var BindAsEventListener = function(object, fun) {
2 var args = Array.prototype.slice.call(arguments).slice(2);
3 return function(event) {
4 return fun.apply(object, [event || window.event].concat(args));
5 }
6 };
사용:
1 var Test = function(){
2 this.init();
3 );
4 Test.prototype = {
5 init:function(){
6 this.name = 'test';
7 this.btn = document.getElementById('test');
8 this._fC = BindAsEventListener(this, this._doClick,'bind event');
9 addEventHandler(this.btn, "click", this._fC );
10 },
11 _doClick:funtion(e,str){
12 e.preventDefault();
13 alert(this.name + ' ' +str);
14 },
15 destory:function(){
16 removeEventHandler(this.btn, "click", this._fC );
17 }
18 }
이벤트 에이전트
1 var Delegate = function (parent,eventType, selector, fn , that){
2 eventType = eventType || 'click';
3 if(!parent){
4 return;
5 }
6 if( typeof fn !== 'function'){
7 return;
8 }
9 if( typeof selector !== 'string'){
10 return;
11 }
12 var handle = function (e){
13 var evt = window.event ? window.event : e;
14 var target = evt.target || evt.srcElement;
15 target = getDlgElement(target);
16 if(target){
17 fn.call(that,{target:target,event:e});
18 }
19 };
20 var getDlgElement = function(ele){
21 if(!ele){
22 return null;
23 }
24 return ( (ele.id === selector) ||
25 (ele.className && ele.className.indexOf(selector) != -1)) ? ele : getDlgElement(ele.parentNode);
26 };
27 parent['on' + eventType] = handle;
28 };
사용:
1 var Test2 = function(){
2 this.init();
3 };
4 Test2.prototype = {
5 init:function(){
6 var me = this;
7 Delegate(document,'click','classname',function(e){
8 e.event.preventDefault();
9 var obj = e.target;
10 me.setVaule(obj,'test')
11 },this);
12 },
13 setVaule:function(elem,str){
14 elem.setAttribute('data-value',str);
15 }
16 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.