2

以下のように設定されたチェックボックスがあります。

<asp:CheckBox ID="myCheckbox" runat="Server" OnClick="showLoadingScreen(this.checked);" AutoPostBack="true" Text="Check me for more data!" /> 

関数showLoadingScreenは次のとおりです。

function showLoadingScreen(isChecked) {         
if (isChecked)
    {
        document.getElementById('form1').style.display='none';
        document.getElementById('img_loading').style.display='block';
    }
else { return false; }
}

チェックボックスがオンになっている場合にのみポストバックできるようにするためにelse句を追加しましたが、どちらの場合もポストバックします。

ページの読み込み時に一連のデータが読み込まれたグリッド(form1内)がありますが、それにデータを追加するために、このチェックボックスを追加しました(プロセスが長くなるため、事前にロードするのではなく、オンデマンドでロードしたいだけです)。チェックされたら、読み込み中のgifを表示し、ポストバックし、データを取得して戻ります。チェックボックスがオフになった場合、ページに十分なデータを残しておくことはまったく問題ないため、何もしたくありません(つまり、前もって表示されるデータは、チェックボックスがオンになっているときに表示されるデータのサブセットです)。

チェックボックスがチェックされている場合は自動的に投稿されますが、チェックされていない場合は自動的に投稿されないようにする方法はありますか?

編集: Dark Falconの提案を使用して、チェックボックスを次のように変更しました。

<asp:CheckBox ID="myCheckbox" runat="Server" OnClick="return showLoadingScreen(this.checked);" AutoPostBack="true" Text="Include HQ Values" /> 

そして、JavaScriptは次のようになります。

function showLoadingScreen(checked) {         
alert(checked);
if (checked)
    {
        document.getElementById('form1').style.display='none';
        document.getElementById('img_loading').style.display='block';
        document.form1.submit();  //my own addition, to get it to post back
    }
else { return false; }
}

現在、チェックされた状態で投稿されますが、チェックボックスをオフにすることはできなくなりました。ご覧のとおり、渡された値を示すアラートを追加しました。チェックボックスをオフにすると正しい値が渡されます(false)が、どういうわけか再びチェックされます。

チェックボックスをオフにする理由は実際にはないので(前に述べたように、チェックされたときのデータセットはチェックされていないデータセットのスーパーセットであるため)、それは大きな問題ではありませんが、なぜそれが行われるのかを知りたいです。何か案は?

4

4 に答える 4

5

この場合、AutoPostBack を設定しないでください。"AutoPostBack"このコントロールの値が変更されるたびにサーバーにポストバックすることを意味します...これはあなたが望むものではありません

代わりにGetPostBackEventReference(myCheckbox,"")、適切なポストバック スクリプトを取得するために使用しshowLoadingScreen、チェックボックスがオンになっている場合はメソッドからこれを呼び出します。

于 2010-01-07T20:53:39.920 に答える
0

onclickハンドラーについては、次のことを行う必要があります。

return showLoadingScreen(this.checked);
于 2010-01-07T17:00:40.513 に答える
-1

チェックされているかどうかを確認するためにJSルーチンを使用してみてください。trueに設定されている場合は、次のことを試してください。

_doPostBack(checkElementReference.name, "");

_doPostBack は、通常はポストバックしないコントロールのサーバーへのポストを実行します。要素の名前を渡す必要があります。これは、サーバー上では、サーバー側チェックボックス コントロールの UniqueID プロパティになります。

于 2010-01-07T17:17:38.907 に答える