Event.stopObservingをしてもゴミが残る
2007年7月12日
prototype.jsのイベント追加・削除周りの話です。
バージョンは、script.acluo.us1.7.0内の1.5.0っす
バージョンは、script.acluo.us1.7.0内の1.5.0っす
Event.observeでイベントを追加して、
Event.stopObservingでイベントを削除するのがprototype.jsルールなんすけど、
それでイベントを削除しても、内部のEvent.observersにゴミが残ってるということに気づいた。
Event.stopObservingでイベントを削除するのがprototype.jsルールなんすけど、
それでイベントを削除しても、内部のEvent.observersにゴミが残ってるということに気づいた。
ユーザの操作により、イベントを上書きをするものを作ってたのですが、
どうもprototype.jsにはイベントの上書き手段がないようなので、
仕方なしに、イベント削除→追加で代替しようと思いきや、なんか釈然としない仕様。
見なきゃ良かった。
どうもprototype.jsにはイベントの上書き手段がないようなので、
仕方なしに、イベント削除→追加で代替しようと思いきや、なんか釈然としない仕様。
見なきゃ良かった。
ちなみに、Event.stopObservingをする際には
Event.observeの引数に入れた関数と全く同じものを引数で渡す必要があるようです。
Event.observeの引数に入れた関数と全く同じものを引数で渡す必要があるようです。
これはネイティブのelement.removeEventListenerとかelement.detachEventの仕様みたいなんですけど、何で関数を渡さないと削除できないんだろう??
3hハマり
あああああ
↑の件なんですけど、そりゃ関数を渡さないとダメですな
↑の件なんですけど、そりゃ関数を渡さないとダメですな
element.addEventListener("click", handlerA, false); element.addEventListener("click", handlerB, false);
これで、elementオブジェクトに、2つイベントを登録できるので
片方を明示的に指定したい場合は、関数を渡す以外に判断方法がないすね
nobu氏が教えてくれた。ありがとう。
ついでにIE6で
element.attachEvent("onclick", handlerA); element.attachEvent("onclick", handlerB);
これをやったら、複数イベントが登録できました。
“element.addEventListener(“click”, handler, false);” と、大体同じだと思っていいのかしらん。