我寫了下面的函數,它添加了一個事件監聽器並註冊了這個事件。假設this.$target
持有目標元素的元素id
(爲前:如果我們在具有id = 'myDiv'
div
添加事件偵聽器,然後this.$target
會myDiv)和this.$_
指向目標元素(例如:this.$_=document.getElementById('myDiv')
)removeEventListener無法正常工作
事件按照以下方式註冊... 對於元素的每種類型的事件偵聽器都有一個數組。例如:myDiv_click
將在div上保留所有點擊事件監聽器,其中id = myDiv...Slly
myDiv_mouseover
將把所有鼠標懸停在元素的事件處理程序上。對應於每個事件,函數返回事件id
。這是在形式eventType_indexInTheArray
。對於例如:一個元素上的第一個鼠標點擊事件將有一個事件ID 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);
}
}
它的一個好主意!謝謝 – 2012-01-30 18:15:49