我编写了以下函数,它添加了一个事件监听器并注册了该事件。假设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()
答案 0 :(得分:2)
您需要将与removeEventListener
完全相同的参数传递给EventListener
。因此足够callbackF
和order
。
你没有这样做。
你可能意味着
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;
}
}
}