Form.Element.Observerクラス
【抜粋】 Form.Element.Observer = Class.create(); Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { getValue: function() { return Form.Element.getValue(this.element); } });
前述Abstract.TimedObserverクラスを継承しています。入力要素の値を指定間隔で監視して、変化があった場合に、指定関数を実行させるインスタンスを生成します。
getValueメソッド
前述Abstract.TimedObserverクラスを継承する場合に必要なメソッド。対象要素(elementプロパティ)の値を、前述Form.Element.getValueメソッドにより取得して返却しています。
複数の同名radioやcheckboxには対応してません。Form.Element.getValueメソッドのせいです^^; 扱う場合は注意が必要です。
また、multiple指定のselectタグの扱いにも注意が必要です。その場合、Form.Element.getValueは値として配列を返却しますが、内容は一緒でも毎回違うオブジェクトになるため、常に指定関数が実行されてしまいます。バグですね・・・。
改修案としては、Form.Element.getValueメソッドの代わりに、Form.Element.serializeメソッドを使うというのがあります。これで一応この現象は回避できるのですが、指定実行関数内で値をそのまま扱うことができなくなります(serializeメソッドが返却する文字列になる)。「Abstract.TimedObserver.onTimerEventメソッド改修検討 - Backstage of theater.js」に改修案を記載しました。
例は次のForm.Observerクラスにまとめます。