我已经编写了以下函数,用于添加事件侦听器并注册事件。假设this.$target包含目标元素的元素id (例如:如果我们在具有id = 'myDiv'的div上添加事件侦听器,则this.$target将为myDiv),并且this.$_指向目标元素(例如:this.$_=document.getElementById('myDiv'))
该事件按以下方式注册...元素的每种类型的事件侦听器都有一个数组。例如:myDiv_click将持有div上的所有单击事件侦听器,让id = myDiv...Slly myDiv_mouseover将鼠标悬停在每个事件的element..Corresponding的事件处理程序上,该函数将返回一个事件id。其格式为eventType_indexInTheArray..对于ex:元素上的第一个鼠标单击事件将具有事件id click_0
这很好用..。
现在,我编写了一个删除eventlistener的函数。该函数将$hear()返回的eventId作为argument...But,执行后事件不是deleted..The,函数被赋予了below..What,是不是有bug?
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-31 01:54:44
您需要像传递给EventListener一样向removeEventListener传递完全相同的参数。因此有足够的callbackF和order。
你不会这么做的。
你的意思可能是
evIndex = a[evIndex].split("_");而不是
evIndex = ev[evIndex].split("_");并希望a是全球性的。
但问题仍然是,你想从String拿回你的原始Function。
你需要重新思考和重新设计你的代码。
只需推送:
{
'event_name' : ev,
'callback' : callbackF,
'order' : order
}转换为a,而不是您的连接字符串。
发布于 2012-01-31 01:55:01
看起来evIndex[0]是您要发送给removeEventListener的字符串,而不是您想要删除的函数的引用。
我认为你需要这样的东西:
this.$_.removeEventListener(evId,callbackF,evIndex[1]);
我意识到字符串evIndex包含函数的名称,但是removeEventListener需要一个对它的实际引用,而不仅仅是它在字符串中的名称。
发布于 2012-06-15 18:44:58
function scaleTwo(influenceEvent){
var slideshow=document.getElementById("step3");
if(influenceEvent){
if (slideshow.attachEvent){
slideshow.attachEvent("on"+mousewheelevt, rotateimage)
} else if (slideshow.addEventListener) {
slideshow.addEventListener(mousewheelevt, rotateimage, false)
}
} else{
if (slideshow.attachEvent) {
slideshow.detachEvent("on"+mousewheelevt, rotateimage);
} else if (slideshow.addEventListener) {
slideshow.removeEventListener(mousewheelevt, rotateimage, false);
}
}
}
var influenceEvent = 0;
$(window).scroll(function(event){
if (($(document).scrollTop() > $('#step1').height()*2) && $(document).scrollTop() < $('#step1').height()*3) {
if(flagScrollTwo) {
scaleTwo(1);
influenceEvent = 1;
}
flagScrollTwo = 0;
}
if (($(document).scrollTop() > $('#step1').height()*3) || $(document).scrollTop() < $('#step1').height()*2) {
if(influenceEvent){
scaleTwo(0);
influenceEvent = 0;
}
}
}https://stackoverflow.com/questions/9068255
复制相似问题