如何使用Javascript设置ASP复选框状态?

如何使用Javascript设置ASP复选框状态?,javascript,.net,vb.net,checkbox,Javascript,.net,Vb.net,Checkbox,在VB.net应用程序中,我使用常规ASP控件创建了几个复选框,即 我正在尝试实现全选/无功能,但我遇到了一些问题。Javascript不会更改Internet Explorer v9中复选框的状态。我尝试用IE的开发工具进行调试,复选框的checked属性设置为true。还尝试设置为选中。以下是JS: function setCheckboxes( state ) { var inputs = document.getElementsByTagName("input"); fo

在VB.net应用程序中,我使用常规ASP控件创建了几个复选框,即

我正在尝试实现全选/无功能,但我遇到了一些问题。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;
}
第二个问题可能与FirefoxV11有关。上面的JS工作正常,取消选中复选框,但是在提交时,它们被设置为初始状态。通过单击来选择和取消选择与正常情况一样正常。我该如何解决这个问题

编辑:为了澄清,这是.net的一个问题,而不仅仅是基本的HTML。我尝试了一个带有复选框的基本页面,IE很好地取消了它们

更新2:包括更多信息,因为它可能是相关的。我只是选中了一些东西,单击这些复选框似乎不会改变它们在Internet Explorer中的状态,但在提交时,它们的状态已被存储

我正在使用Telerik网格视图并将数据绑定到它。以下是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">&nbsp;</label>

应检查checked属性的值,而不是true/false。Firefox可以处理真/假值,但IE似乎不喜欢


查看文档:

尝试查看以下问题/答案:

他们实现的for循环的语法稍有不同,您可能想试试。我还推荐了一些关于如何使用jQuery实现这一点的好例子。

不满

我想这可能会有帮助:在你的setcheckbox函数中。不知道为什么,但复选框的行为似乎有所不同……嗯,其他的一切

function setCheckboxes( state )
{
    var inputs = document.getElementsByTagName("input");
    for ( var i in inputs )
    {
        if ( inputs[i].type == "checkbox" )
        {
            if (state == "true"){
                inputs[i].disabled=false;
                inputs[i].parentElement.disabled = false;
            } else {
                inputs[i].disabled=true;
                inputs[i].parentElement.disabled = true;
            }               
        }
    }
}
希望有帮助


-sf

如果是这种情况,为什么它会返回true/false而不是checked/false?我已经试过了,投票赞成a不读这个问题,投票反对b w3schools,这是互联网上最差的网站。w3schools通常不是特别准确的文档。这种语法在这里不适用。我没有尝试将复选框状态设置为与另一个复选框相同的状态。我在VS2008中设置了一个项目-我没有此问题。你的目标版本是什么?是否有任何事件绑定到这些复选框的检查?@user1090190我实际使用的是VS2005版本8.0.50727.867和.NET版本2.0.50727 SP2。据我所知,复选框上没有任何事件。嗯,我似乎仍然无法复制。你可以发布更多的页面还是敏感信息?这里肯定还有其他原因。@user1090190添加了更多信息-经过进一步调查,这似乎是我使用的Telerik控件的问题。我只使用ASP复选框,但我认为Telerik会检测它们并将它们转换为自己的系统。我以前从未使用过Telerik,但听起来他们可能在复选框上放置了一个元素?如果进入chrome并右键单击复选框并检查元素,它是否指向输入或其他元素?