【发布时间】:2011-01-02 14:00:37
【问题描述】:
我有一个复选框,设置如下:
<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)时,它传入了正确的值,但随后又以某种方式再次被选中。
这不是一个大问题,因为真的没有理由取消选中该框(因为正如我之前所说,选中时的数据集是未选中数据集的超集),但我仍然想知道它为什么会这样做那。有什么想法吗?
【问题讨论】:
-
你的代码在 VS 设计器中的样子并不重要。您需要查看浏览器中的标记以确定如何解决问题。
-
乔希,请看我的编辑。我听取了您的建议,在浏览器中查看源代码,结果如下所示: 你可以看到以某种方式添加了checked="checked",我觉得尽管javascript返回false,但它仍然处于检查状态。关于如何让它不添加checked="checked"部分的任何想法?
-
我宁愿建议:取消选中复选框并进行不呈现任何控件的回调。这样可以确保您没有不一致的服务器/客户端控制状态。
标签: asp.net javascript checkbox postback autopostback