removeEventListener无法正常工作

时间:2012-01-30 17:42:23

标签: javascript javascript-events addeventlistener

我编写了以下函数,它添加了一个事件监听器并注册了该事件。假设this.$target包含目标元素的元素id(例如:如果我们在div上添加id = 'myDiv'的事件监听器,那么this.$target将是myDiv )和this.$_指向目标元素(例如:this.$_=document.getElementById('myDiv')

该活动以下列方式注册...... 每个类型的事件侦听器都有一个数组元素。例如:myDiv_click将持有id = myDiv...Slly myDiv_mouseover的div上的所有点击事件侦听器,将所有鼠标悬停在元素的事件处理程序上。对应于每个事件,事件{{1} }由函数返回。其格式为id ..例如:元素上的第一个鼠标点击事件将具有事件ID eventType_indexInTheArray

这很好......

现在我编写了一个删除eventlistener的函数。该函数将click_0返回eventId作为参数...但执行后该事件不会被删除..下面给出了该函数。它的错误是什么?

$hear()

3 个答案:

答案 0 :(得分:2)

您需要将与removeEventListener完全相同的参数传递给EventListener。因此足够callbackForder

你没有这样做。

你可能意味着

evIndex = a[evIndex].split("_");

而不是

evIndex = ev[evIndex].split("_");

并希望a成为全球性的。

但问题仍然是您希望从Function获取原始String

您需要重新考虑并重新设计代码。

简单推送:

{ 
   'event_name' : ev,
   'callback' : callbackF,
   'order' : order
}

a而不是你的连接字符串。

答案 1 :(得分:1)

看起来evIndex[0]是一个字符串,您要发送到removeEventListener而不是对要删除的函数的引用。

我认为你需要这样的东西:

this.$_.removeEventListener(evId,callbackF,evIndex[1]);

我意识到字符串evIndex [0]包含函数的名称,但removeEventListener需要对它的实际引用,而不仅仅是字符串中的名称。

答案 2 :(得分:0)

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;
        } 
    }
}