正確使用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 閱讀(1189) 評論(0)  編輯  收藏 所屬分類: javascript
          主站蜘蛛池模板: 新竹市| 伊春市| 阿坝| 长泰县| 湄潭县| 哈尔滨市| 汝南县| 嘉义县| 宿松县| 阳西县| 岐山县| 曲阳县| 敦化市| 绩溪县| 盘锦市| 柘荣县| 太仆寺旗| 呼伦贝尔市| 饶河县| 台北市| 宜宾县| 新蔡县| 平陆县| 阜新| 仁化县| 辽源市| 丹江口市| 苏州市| 遵义市| 泰和县| 夹江县| 右玉县| 张家港市| 建宁县| 普定县| 赫章县| 丁青县| 专栏| 保亭| 图片| 拉孜县|