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