2

オプションがクリックされるたびに(各選択の視覚的表現とともに)Javascriptを介して非表示のINPUTに値を追加するSELECT要素があり、別のJavascript関数の変更を監視できるようにしたいと考えています。モジュール性のために、2 番目の関数を最初の関数に統合することはできません。また、ハッキングを避けるために、隠された INPUT の値をポーリングしたくありません。現在、SELECT と非表示の INPUT の両方を含む DIV で onclick イベントを使用していますが、これも非常にハックっぽいです。非表示の INPUT 要素の変更を監視する方法を知っていますか?

4

1 に答える 1

3

だから、あなたは持っています:

  • 非表示の INPUT を更新する関数 A。
  • INPUT が更新されたときに呼び出される関数 B。

関数 A が機能しているときに呼び出し/ディスパッチする独自の「イベント」を作成してみませんか?

ほとんどの Javascript フレームワークはカスタム イベントの概念を非常に簡単にサポートしていると思いますが、それは一連の関数呼び出しにすぎません。

たとえば、単一のイベントのディスパッチャを表すオブジェクト D を作成します。はい、これはばかげていますが、コンセプトをシンプルに保とうとしています。このオブジェクト D は、そのイベントに「登録」された関数のリストを保持し、イベントがディスパッチされると、それらの関数を呼び出します。

何かのようなもの:

var d = (function() {
    var funcs = [];

    function fire() {
        for (var i=0; i<funcs.length; ++i) {
          funcs[i].call();
        }
    }

    function register(newfunc) {
        funcs.push(newfunc);
    }    

    return {
        fire: fire,
        register: register
    };
})();

あとは 2 つのことを行うだけです。関数 A でイベントを発生させます。

function A() {

    // do stuff to update the INPUT

    d.fire();
}

また、onloadイベントが発生したときに呼び出される関数 B を「登録」します。

d.register(B);

A と B はお互いのことを何も知らず、3 番目のオブジェクトについてのみ知る必要があるため、このアプローチはモジュールの分離の原則 (またはそれが呼ばれるもの) を維持します。

于 2009-04-28T05:15:26.540 に答える