Я написал следующую функцию, которая добавляет слушателя событий и регистрирует событие. Предположим, что this.$target
удерживает элемент id
целевого элемента (напр: если мы добавим слушателя событий на div
имея id = 'myDiv'
, то this.$target
будет myDiv) и this.$_
указывает на целевой элемент (для ех: this.$_=document.getElementById('myDiv')
)removeEventListener не работает должным образом
Событие регистрируется следующим образом ... Для каждого типа прослушивателей событий для каждого элемента существует массив. Например: myDiv_click
проведет все прослушиватели событий по событию на div, имеющем id = myDiv...Slly
. myDiv_mouseover
будет удерживать все мыши над обработчиками событий элемента. Соответствуя каждому событию, функция id
возвращается функцией. Который в виде eventType_indexInTheArray
.. Для экс: первое событие мыши на элемент будет иметь идентификатор события click_0
Это прекрасно работает ...
Теперь я написал функцию для удаления EventListener. Функция принимает eventId
, возвращенный $hear()
в качестве аргумента ... Но после его выполнения событие не удаляется. Функция дается ниже. Что это за ошибка?
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);
}
}
его хорошая идея!спасибо –