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