以下のように設定されたチェックボックスがあります。
<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)が、どういうわけか再びチェックされます。
チェックボックスをオフにする理由は実際にはないので(前に述べたように、チェックされたときのデータセットはチェックされていないデータセットのスーパーセットであるため)、それは大きな問題ではありませんが、なぜそれが行われるのかを知りたいです。何か案は?