我有一个从数据库自动填写的只读表单。我有几个具有true / false值的字段,并希望它们显示为空或已选中的复选框。我可以对复选框控件进行数据绑定并禁用它,但它会显示为灰色。是否有一种简单的方法来改变它,以便它以正常,易于阅读的大胆出现,但仍然被禁用?如果没有,最好的方法是什么?我应该使用图像吗?
答案 0 :(得分:6)
你也可以这样。
<asp:CheckBox id="checkbox1" Text="Custom" onclick="javascript: return false;" />
将其呈现为
<input type="checkbox"
checked onclick="javascript: return false;">Custom</input>
答案 1 :(得分:3)
有趣的问题!
我只能使用图像而不是普通的复选框看到一个问题,这就是活动复选框与禁用(基于图像)复选框的不同之处。因此,如果您使用图像路径,则可能需要设置所有复选框的样式。 :)
您可以使用以下jQuery方法有效地禁用任何复选框(到目前为止,我仅在Chrome和IE 9中进行了测试)。
$('.readonly:checkbox').click(function(e) {
e.preventDefault();
});
这将使用“readonly”类“禁用”任何复选框。
或者,您可以使用内联JavaScript函数(不建议使用albiet,因为它会增加混乱和混淆):
<input type="checkbox" onclick="event.preventDefault();" />
您使用“preventDefault()”而不是“return false”的原因是因为返回false将停止传播。这意味着您的点击事件不会冒泡到父元素。这可能会导致其他代码出现问题......但这不太可能。
另外,就像Bala R提到的那样,你不能依赖这些限制来工作。您的服务器端代码应该知道这些值是只读的,并且不要更新它们。
以下是jsFiddle示例:http://jsfiddle.net/xixionia/3rXCB/
我希望这有用! :)
答案 2 :(得分:1)
您可以使用javascript执行此类操作,并将其用于复选框的onclick处理程序。
function makeMeReadonly(checkbox){
checkbox.checked = !checkbox.checked;
}
和
<asp:CheckBox id="checkbox1" onclick="makeMeReadonly(this)" />
或
<asp:CheckBox id="checkbox1" onclick="this.checked = !this.checked" />
如果你想要内联。
但是您不应该依赖于此以获得安全性,因为当javascript不可用时它将是一个常规复选框和/或客户端代码不是很难解决客户端代码限制,但在您的情况下,因为您有一个只读看来,我认为你没有任何保存更改的逻辑。
答案 3 :(得分:1)
我遇到了同样的问题,并通过复选框上的OnClick事件修复了它。在事件处理程序中,.Checked状态被设置为它应该显示的值。
private void chkBox_CheckStateChanged(object sender, EventArgs e)
{
chkBox.Checked = boolDatabasevalue;
return;
}
效果很好,用户可以点击复选框,但复选标记不会改变。
唯一的问题是指示焦点的轻微边框阴影。但是,正如OP所寻求的那样,复选标记是易于阅读的大胆。
注意:这是C#,但在Asp.Net中,这应该是类似的。