0

Web アプリケーションがあり、その中でクライアント側の検証を行っています。これは、各 Asp:TextBox に追加することによって行われます

onkeyup="javascript: value_change(this);"

これが値の変更になると、私はこのJavascriptを持っています...

function value_change (text_box) {
    // validate code here
    if (valid) {
        text_box.className = "normalInput";
        document.getElementById("GoButton").disabled = false;
    }
    else {
        text_box.className = "errorInput";
        document.getElementById("GoButton").disabled = true;
    }
}

className は、顕著な部分が次のように見える CSS クラスに対応します。

.normalInput
{
    background-color: #ffffff;
}
.errorInput
{
    background-color: #ff0000;
}

これは、ページが最初に表示されたときはうまく機能しますが、最初のポストバックの後、関数が呼び出され、クラス名が設定され、GoButton の感度が設定されますが (デバッグでステップスルーすることでこれを実証しました)、背景色は機能しません。変化する。

これがなぜなのか、私が何をすべきか知っている人はいますか?

@Pete のアドバイスを受けて編集し、新しいクラス名が割り当てられた直後に text_box を調べたところ、 currentStyle 属性は変更されていないようです。currentStyle の特性は normalInput クラスと同じです。私はそれらを微調整し、再実行して確認しました。したがって、別のCSSが何らかの形で機能しているのではなく、割り当てが無視されていると推測します。

4

2 に答える 2

0

多くの罵倒の後、ポストバック後に次のように背景色を変更するための検証が最終的に得られました:-

function value_change (text_box) {
    // validate code here
    if (valid) {
        text_box.className = "normalInput";
        document.getElementById(text_box.name).style.backgroundColor = "#ffffff";
        document.getElementById("GoButton").disabled = false;
    }
    else {
        text_box.className = "errorInput";
        document.getElementById(text_box.name).style.backgroundColor = "#ff0000";
        document.getElementById("GoButton").disabled = true;
    }
}

つまり、手で設定します。CSSクラスの目的全体を通してコーチと4人を運転しているので、私はこれがあまり好きではありません。誰かがより良いものを思いつくことができれば、私はすべて耳にします。

于 2013-02-26T10:39:02.947 に答える
0

クライアントで変更されたスタイリングは、サーバーに送り返されません。それらを永続化するには、サーバーで自分でプロパティを設定する必要があります。サーバーは、サーバーで使用可能な一連のプロパティからコントロール定義を構築し、元の値を再レンダリングします。これは、テキスト ボックスの値のみがサーバーにポスト バックされるためです。他のすべてはそうではありません。

そうは言っても、条件を解釈してボタンを有効または無効にし、適切な CSS スタイルを設定し、サーバーでこれらのプロパティを設定するか、ドキュメントの読み込み時にスタイルを再適用することができます。

于 2013-02-25T15:31:50.953 に答える