0

次の簡単な例を考えてみましょう。

サーバー側の ASP.NET コード:

TextBox theTextBox = ...
theTextBox.Attributes.Add("onchange", "HandleOnChangeEvent");

クライアント側の JavaScript:

var numberOfChanges;

function HandleOnChangeEvent() {
   numberOfChanges++;
   alert(numberOfChanges);
}

つまり、ユーザーがテキストボックスの値を変更するたびに、ページがロードされてからテキストボックスの値が変更された回数を示すダイアログがポップアップします。

しかし、同じページに texbox のインスタンスが複数ある場合はどうなるでしょうか? numberOfChanges はグローバルであるため、すべてのテキスト ボックスについて、ページ上の変更の総数を追跡します。個々のテキストボックスごとに、インスタンス固有にする必要があります。

これを解決するための好ましい方法は何ですか? それが重要かどうかはわかりませんが、私の実際のシナリオは、この例のように 1 つだけではなく、より多くの状態変数を使用して、はるかに複雑であることを言及する必要があります。

ありがとう!/フレドリック

4

1 に答える 1

1

JavaScript のプロトタイプの性質を利用して、次のようにテキストボックスを使用に応じて拡張します。

function HandleOnChangeEvent(e) {

    // `e` contains the DOM element that was clicked
    if( !e.numberOfChanges ) e.numberOfChanges = 0; // dynamically set the property
    e.numberOfChanges++;
    alert( e.numberOfChanges );
}

onchange属性を次のように変更する必要があります。

onchange="HandleOnChangeEvent(this);"
于 2013-02-04T08:03:19.917 に答える