js 사용자 정의 이벤트의 간단한 실현
7276 단어 사용자 정의
jQuery 코드 구현 및 트리거 사용자 정의 구현은 다음과 같습니다.
jQuery :
$(dom).bind('data-change',function(){//dom html
alert("asd");
})
jQuery :
$(dom).trigger('init-change',[data]);
그러나 내부 메커니즘은 어떻게 이 사건을 촉발시켰을까?원래 jQuery는 이러한 사용자 정의 이벤트를 캐시하는 것을 통과했다. 나는 스스로 하나를 실현했다. 다음은 나의 코드이다.
var Dojo = function(selecter,context){
return new this.init(selecter,context);//
}
Dojo.prototype.event = {};
Dojo.prototype.init = function(selecter,context){
this.gid = 0;
var dom = this.getDom(selecter);
this.dom = dom;
this.dom.gid = this.gid++;
return this;
}
Dojo.prototype.getDom = function(selecter){
var dom = document.getElementById(selecter) || null;
return [dom];
}
Dojo.prototype.addEvent = function(eventName,fn){//
if(!this.event[eventName]){
this.event[eventName] = [];
}
this.event[eventName].push( fn );
}
//Dojo
Dojo.Util = {};
Dojo.Util.isFunction = function(fn){
return Object.prototype.toString.call( fn ).slice(8,-1) === 'Function';
}
Dojo.Util.ToArray = function(args){
return Array.prototype.slice.call( args , 0 );
}
//
Dojo.prototype.click = function(fn){
this.event[this.dom.gid] = this.event[this.dom.gid] || [];
var i = j = 0;
var self = this;
if(Dojo.Util.isFunction( fn )){
for(;i<this.dom.length;i++){
this.dom[i].addEventListener('click' , function(e,data){
fn.call(self,e,data);
} ,false);
}
}
}
Dojo.prototype.trigger = function(eventName,data){
var i = 0;
if(!this.event[eventName]){
return;
}
for(len = this.event[eventName].length;i<len;i++){
this.event[eventName][i].apply(this.dom,data);
}
return this;
}
Dojo.prototype.init.prototype = Dojo.prototype;
var dom = new Dojo('dom');
// dom
//
dom.addEvent("data-change",function(){
console.log(arguments);
});
dom.addEvent("data-change",function(){
var arr;
arr = Dojo.Util.ToArray(arguments);
alert(arr);
});
//click
dom.click(function(e){
this.trigger("data-change",['a','c','d']);
});
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vue 어셈블리에서 여러 번 사용자 정의 매개변수 작업 재사용추가 정보: VUE 구성 요소(슬롯 slot 및 재사용 가능 구성 요소) 하위 구성 요소의 일부 내용이 부모 구성 요소를 통해 DOM을 전달할 때 부모 구성 요소props 전가의 비교적 좌절된 문법을 사용하지 않아도...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.