作者klern (灰)
看板Ajax
标题[问题] removeEventListener 失败?
时间Mon Jan 3 17:13:11 2011
大家好 目前遇到一点瓶颈 囧
我写一小段要侦测在行动装置上手势的事件
但是最後的removeEventListener 似乎没成功
我在remove的那个function中 加了一段 alert 发现警告视窗数目会递增
例如第一次弹一个视窗 第二次就弹两个
想请问我是哪里写错了吗 谢谢
P.S. 装置为iPad , $.shove式一个plugin传入目前的this
document.getElementById(“divID”).addEventListener(‘gesturestart’,
$.shove(this.onGestureStart, this), false);
onGestureStart: function(e) {
e.preventDefault();
document.getElementById("divID").addEventListener('gesturechange',
$.shove(this.onGestureChange, this), true);
document.getElementById("divID").addEventListener('gestureend',
$.shove(this.onGestureEnd, this), true);
return false;
},
onGestureChange: function(e) {
e.preventDefault();
…
return false;
},
onGestureEnd: function(e) {
e.preventDefault();
alert('1');
document.getElementById("divID").removeEventListener('gestureend',
$.shove(this.onGestureEnd, this), true);
document.getElementById("divID").removeEventListener('gesturechange',
$.shove(this.onGestureChange, this), true);
document.getElementById("divID").removeEventListener('gesturestart',
$.shove(this.onGestureStart, this), false);
return false;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.204.7.152
※ 编辑: klern 来自: 218.166.178.204 (01/03 19:53)
1F:→ sk1765:removeEventListener 移除的是第二个参数的函式名称 01/03 20:47
2F:→ sk1765:你得第二个参数是 $.shove(....) 应该是移掉了$.shove 01/03 20:48
3F:→ sk1765:而不是传进去的this.onGestureEnd 这个函式 01/03 20:51
4F:→ sk1765:但是移除仅需填函式名$.shove 是否你的外挂就是一个函式 01/03 20:54
5F:→ sk1765:另外 把$.shove(this.onGestureEnd, this) 包含参数 这样 01/03 20:55
6F:→ sk1765:代表的是执行 $.shove(this.onGestureEnd, this)执行的回传 01/03 20:57
7F:→ sk1765:而不是 函式名称的细节 01/03 20:58
8F:→ sk1765:sorry,细节->系结 打错 对这几个event不了解 以上仅供参考 01/03 21:02
9F:→ sk1765:可能要先了解 $.shove(....) 回传的是什麽 01/03 21:56
谢谢^^
附上SHOVE plugin的code
$.extend({
shove: function(fn, object) {
return function() {
return fn.apply(object, arguments);
}
}
});
※ 编辑: klern 来自: 218.166.182.161 (01/03 22:52)
10F:→ sk1765:shove回传的是 function() { return this.onGestureend. 01/03 23:24
11F:→ sk1765:apply(this,e); } 所以并不是直接系结this.onGestureEnd 01/03 23:27
12F:→ sk1765:因此 removeEventListener没有作用到 this.onGestureend 01/03 23:29
13F:→ sk1765:但是这样我就很纳闷了 为什麽addEventListener可以系结的到 01/03 23:31
14F:→ sk1765:你能不能不要用shove 还是你一定非得用 01/03 23:33
15F:→ klern:当初用shvoe来绑住this的用意是 能够在函式中自由存取 01/03 23:45
16F:→ klern:例this.abc的property 不知道这个写法是不是有问题@@" 01/03 23:46