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クラスにまとめます。