正確使用prototype.js的Event.stopObserving方法

          最近在網上看到《正確使用prototype.js的Event.stopObserving方法》文章,http://my.donews.com/digitalghost/2006/07/25/sihgiowppuclsdzhpvgsbgghlrusqycjxmam/
          原文 :

          今天使用時發現Event.stopObserving的一些問題,其實是使用得方法不當造成的。

          對于以下代碼:

          var ClassA = Class.create();
          ClassA.prototype = {
          initialize : function(){},
          observe : function(){
          Event.observe($(’span’),’click’,this._handlerA.bind(this));

          Event.observe($(’span’),’click’,this._handlerB);

          },

          _handlerA : function(){
          alert(’observer a’);
          },

          _handlerB : function(){
          alert(’observer b’);
          },

          stopObserving : function(){
          Event.stopObserving($(’span’),’click’,this._handlerA.bind(this));

          Event.stopObserving($(’span’),’click’,this._handlerB);
          }

          }

          正常使用時:

          var ins = new ClassA();

          ins.observe();

          之后點擊id=”span”的標簽之后會正常調用ins._handlerA/B兩個方法,接著執行:

          ins.stopObserving()方法之后,奇怪的現象發生了,會發現ins._handlerA依舊執行,也就是說并沒有將原本hook到span上面的onclick handler A給取消掉。

          原因是:對于

          Event.observe($(’span’),’click’,this._handlerA.bind(this));

          這一行來說,this._handlerA.bind(this)是一個anonymous function,并沒有一個確定的pointer指向這個function,所以當執行

          Event.stopObserving($(’span’),’click’,this._handlerA.bind(this));

          這一行的時候,this._handlerA.bind(this)指向另一個位置,所以并沒有unhook span onclick event.

          解決的辦法就是對于一個需要unhook的event來說,不要使用一個anonymous function 作為其event handler.


          我在使用也遇到同樣的問題,

          在另一個blog看到解決這個問題的方法?
          ????
          this.handler=this._handlerA.bind(this); //讓一個變量指向他

          Event.observe($('span'),'click',this.handler);

          Event.stopObserving($('span'),'click',this.handler);

          這樣就沒有問題了



          posted on 2006-12-25 16:04 windfree 閱讀(1184) 評論(0)  編輯  收藏 所屬分類: javascript
          主站蜘蛛池模板: 临安市| 井冈山市| 长泰县| 林周县| 南城县| 永定县| 大余县| 乳源| 洪江市| 锡林浩特市| 札达县| 柏乡县| 黄浦区| 新疆| 阿巴嘎旗| 特克斯县| 日土县| 兴安县| 稷山县| 增城市| 金昌市| 池州市| 揭西县| 宝丰县| 梁河县| 内丘县| 星子县| 茶陵县| 广汉市| 冀州市| 黄浦区| 峡江县| 顺昌县| 分宜县| 永定县| 河曲县| 广河县| 临桂县| 丰县| 南木林县| 太康县|