Re: [問題] removeEventListener 失敗?
謝謝原po
測了一陣子 似乎可以了 需要在反覆在測試一下
我剛剛失敗是因為 我在手勢結束gestureend函式的最後 又重新註冊gesturestart
document.getElementById("divID").addEventListener(
'gesturestart', a1 = $.shove(this.onGestureStart, this), false);
後來我是直接在程式的初始地方 直接指派函式給變數a1, a2, a3
a1 = $.shove(this.onGestureStart, this);
a2 = $.shove(this.onGestureChange, this);
a3 = $.shove(this.onGestureEnd, this);
所以註冊時的部份變成
document.getElementById("divID").addEventListener(
'gesturestart', a1, false);
document.getElementById("divID").addEventListener(
'gesturechange', a2, true);
document.getElementById("divID").addEventListener(
'gestureend', a3, true);
移除時
document.getElementById("divID").removeEventListener(
'gestureend', a3, true);
document.getElementById("divID").removeEventListener(
'gesturechange', a2, true);
document.getElementById("divID").removeEventListener(
'gesturestart', a1, false);
document.getElementById("divID").addEventListener(
'gesturestart', a1, false);
參考看看 我還要在多加測試有沒有問題
只是我還是有點不懂為何 在註冊(addEventListener)的地方指派
變數a1,a2,a3函式會出現問題, 我會來是直接把指派函式的部份拉到最前方才成功
※ 引述《sk1765 (鼎玉鉉)》之銘言:
: ※ 引述《klern (灰)》之銘言:
: : 大家好 目前遇到一點瓶頸 囧
: : 我寫一小段要偵測在行動裝置上手勢的事件
: : 但是最後的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;
: : }
: 我大概搞懂你的問題出在哪了 就是那個$.shove
: addEventListener('gestureend',$.shove(this.onGestureEnd, this), true)
: 之所以可以繫結上event 是因為 $.shove(this.onGestureEnd, this)
: 回傳一個匿名function
: function() { return this.onGestureend.apply(this,e); } ->A
: 這個匿名function 繫結到了 gestureend事件
: 所以即使gestureend事件 不是直接執行 this.onGestureend 他仍然被跑到了
: 現在再來看
: removeEventListener('gestureend',$.shove(this.onGestureEnd, this), true)
: 他也繫結到了匿名function
: function() { return this.onGestureend.apply(this,e); } ->B
: 但是這個匿名function 跟addEventListener的那個 完全是兩個匿名function
: 因為用$.shove產生了兩次 A和B是不同的
: 所以只要想辦法刪到同一個匿名function就行了
: 以下是我的解法 多設幾個變數就行了
: document.getElementById(“divID”).addEventListener(‘gesturestart’,
: a1 = $.shove(this.onGestureStart, this), false);
: onGestureStart: function(e) {
: e.preventDefault();
: document.getElementById("divID").addEventListener('gesturechange',
: a2 = $.shove(this.onGestureChange, this), true);
: document.getElementById("divID").addEventListener('gestureend',
: a3 = $.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',
: a3, true);
: document.getElementById("divID").removeEventListener('gesturechange',
: a2, true);
: document.getElementById("divID").removeEventListener('gesturestart',
: a1, false);
: return false;
: }
: 以上請參考 若不能用在研究
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.204.7.152
→
01/04 10:41, , 1F
01/04 10:41, 1F
→
01/04 10:42, , 2F
01/04 10:42, 2F
→
01/04 10:43, , 3F
01/04 10:43, 3F
→
01/04 10:54, , 4F
01/04 10:54, 4F
→
01/04 10:55, , 5F
01/04 10:55, 5F
→
01/04 10:56, , 6F
01/04 10:56, 6F
→
01/04 10:58, , 7F
01/04 10:58, 7F
→
01/04 10:59, , 8F
01/04 10:59, 8F
註冊的地方 打錯 修正一下:p
※ 編輯: klern 來自: 123.204.7.152 (01/04 12:01)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章
33
68