나는 이벤트 수신기를 추가하고 이벤트를 등록하는 다음 함수를 작성했습니다. this.$target
대상 요소의 요소 id
를 보유하고 있다고 가정 (예를 들어 우리가 div
가 id = 'myDiv'
있는에 이벤트 리스너를 추가하는 경우, 다음 this.$target
될 것 myDiv) 및 (예를 들어 this.$_=document.getElementById('myDiv')
) 대상 요소에 this.$_
점removeEventListener가 제대로 작동하지 않습니다.
이벤트 다음과 같은 방법으로 등록됩니다 ... 요소에 대한 이벤트 리스너의 각 유형에 대한 배열이 있습니다. 예 : myDiv_click
은 id = myDiv...Slly
myDiv_mouseover
의 div에있는 모든 클릭 이벤트 리스너를 보유하며 요소의 모든 마우스 오버 이벤트 핸들러를 보유합니다. 각 이벤트에 해당하는 이벤트에 대해 id
이벤트가 반환됩니다. 예를 들어 어떤 형태 eventType_indexInTheArray
에 .. : 요소의 첫 번째 마우스 클릭 이벤트는
click_0
이 잘 작동이됩니다. 이 함수는 $hear()
에 의해 반환 된 eventId
을 인수로 취합니다 ... 그러나 그것을 실행 한 후에 이벤트는 삭제되지 않습니다 .. 함수는 아래에 주어져 있습니다 .. 그 안에있는 버그는 무엇입니까?
main.prototype.$hear = function(ev,callbackF,order)
{
if(typeof order == 'undefined' || order =='')
order = 0;
order = (order == 1)?true:false;
var a;
if(!(a = (this[this.$target+ev])))//event registration
a = ((this[this.$target+ev]) = new Array());
a.push(callbackF+"_"+order);
this.$_.addEventListener(ev,callbackF,order);
return ev+"_"+(a.length - 1);//event Id
}
main.prototype.$miss = function(evId)
{
var ev = evId.split("_");
var evIndex = ev[1];
ev = ev[0];
evId = ev;
if((!(ev = (this[this.$target+ev]))) || ev.length-1<evIndex||evIndex<0)
{
alert("ERROR \n\n\n Event having event id "+evId+" is not registered\n");
return false;
}
else
{
var temp = evIndex;
evIndex = ev[evIndex].split("_") ;
this.$_.removeEventListener(evId,evIndex[0],evIndex[1]);
ev.splice(temp,1);
}
}
좋은 아이디어!덕분에 –