正確使用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
          主站蜘蛛池模板: 鲁山县| 白朗县| 浦城县| 滨海县| 达尔| 冀州市| 遵化市| 盐池县| 资阳市| 威信县| 德阳市| 襄樊市| 伊吾县| 富宁县| 修文县| 莱州市| 石泉县| 留坝县| 中超| 中山市| 侯马市| 青川县| 唐河县| 镇坪县| 灯塔市| 华安县| 双峰县| 巴青县| 牙克石市| 博白县| 红原县| 永仁县| 轮台县| 普陀区| 临猗县| 星座| 赤水市| 宜阳县| 方正县| 宣武区| 卓尼县|