【发布时间】:2012-05-01 15:33:42
【问题描述】:
在一个 VB.net 应用程序中,我有几个使用常规 ASP 控件创建的复选框,即<asp:CheckBox ID="cb3" runat="server" Checked="true" />
我正在尝试实现“全选/全选”功能,但遇到了一些问题。 Javascript 不会更改 Internet Explorer (v9) 中复选框的状态。我尝试使用 IE 的开发工具进行调试,并且复选框肯定将其checked 属性设置为true。 (也尝试设置为“已检查”。)这是 JS:
function setCheckboxes( state )
{
var inputs = document.getElementsByTagName("input");
for ( var i in inputs )
{
if ( inputs[i].type == "checkbox" )
{
// this line is definitely executed on the checkboxes
inputs[i].checked = state;
// this doesn't work either
//inputs[i].checked = (state ? "checked" : "");
}
}
}
document.getElementById("cbSelectAll").onclick = function() {
setCheckboxes(true);
return false;
}
document.getElementById("cbSelectNone").onclick = function() {
setCheckboxes(false);
return false;
}
Firefox (v11) 中出现了第二个可能相关的问题。上面的 JS 工作正常并取消选中复选框,但是在提交时它们被设置为初始状态。通过单击进行选择和取消选择可以正常工作。我该如何解决这个问题?
编辑:明确地说,这是.net 的具体问题,而不仅仅是基本的 HTML。我尝试了一个带有复选框的基本页面,IE(取消)选择它们就好了。
更新 2:包括更多信息,因为它可能是相关的。我刚刚检查了几件事,单击复选框似乎并没有在 Internet Explorer 中更改它们的状态,但是在提交时它们的状态已被存储。
我正在使用 Telerik Grid 视图并将数据绑定到它。这是aspx代码:
<telerik:RadGrid ID="gridContacts" runat="server" Skin="Office2007" GridLines="None" AutoGenerateColumns="False">
<MasterTableView>
<RowIndicatorColumn>
<HeaderStyle Width="20px" />
</RowIndicatorColumn>
<ExpandCollapseColumn>
<HeaderStyle Width="20px" />
</ExpandCollapseColumn>
<Columns>
<telerik:GridBoundColumn DataField="id" DataType="System.String" UniqueName="id" Visible="False">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="name" DataType="System.String" UniqueName="name" HeaderText="Name">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="email" DataType="System.String" UniqueName="email" Visible="False">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="sms" DataType="System.String" UniqueName="sms" Visible="False">
</telerik:GridBoundColumn>
<telerik:GridTemplateColumn DataField="useemail" DataType="System.Boolean" UniqueName="useemail" HeaderText="Email">
<ItemTemplate>
<asp:CheckBox ID="cbEmail" runat="server" Checked='<%# Eval("useemail") %>' />
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn DataField="usesms" DataType="System.Boolean" UniqueName="usesms" HeaderText="SMS">
<ItemTemplate>
<asp:CheckBox ID="cbSMS" runat="server" Checked='<%# Eval("usesms") %>' />
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
<FilterMenu EnableTheming="True" Skin="Office2007">
<CollapseAnimation Duration="200" Type="OutQuint" />
</FilterMenu>
</telerik:RadGrid>
对于每个复选框,输出的 HTML 是这样的:
<input name="ctl00$ContentPlaceHolder1$gridContacts$ctl00$ctl04$cbEmail"
class="Office2007 input" id="ctl00_ContentPlaceHolder1_gridContacts_ctl00_ctl04_cbEmail"
type="checkbox" CHECKED="checked" /><label class="Office2007 radfdCheckboxChecked"
for="ctl00_ContentPlaceHolder1_gridContacts_ctl00_ctl04_cbEmail" unselectable="on"> </label>
【问题讨论】:
-
我在 VS2008 中建立了一个项目 - 我没有这个问题。你的目标版本是什么?您是否有任何与检查这些复选框相关的事件?
-
@user1090190 我实际上在使用 VS2005(版本 8.0.50727.867)和 .NET 版本 2.0.50727 SP2。据我所知,复选框上没有事件。
-
嗯,我似乎仍然无法复制。您可以发布更多页面还是敏感信息?这里必须有其他东西在起作用。
-
@user1090190 添加了更多信息 - 经过进一步调查,这似乎是我正在使用的 Telerik 控件的问题。我只使用 ASP 复选框,但我认为 Telerik 会检测到它们并将它们转换为自己的系统。
-
我以前从未使用过 Telerik,但听起来他们可能会在复选框上放置一个元素?如果您进入 chrome 并右键单击复选框并检查元素,它是指向输入还是其他元素?
标签: javascript .net vb.net checkbox