我用js实现CheckBoxList全选,具体代码是这样的
<script type="text/javascript" language="javascript">
    //全选
        function CheckAll(chb) {
            var aa = document.getElementsByTagName("input");
            for (var i = 0; i < aa.length; i++) {
                if (aa[i].type == "checkbox" && aa[i].name.indexOf(chb) > -1) {
                    aa[i].checked = true;
                }
            }
        }
        //反选
        function RemoveAll(chb) {
            var aa = document.getElementsByTagName("input");
            for (var i = 0; i < aa.length; i++) {
                if (aa[i].type == "checkbox" && aa[i].name.indexOf(chb) > -1) {
                    aa[i].checked = false;
                }
            }
        }
    </script>这里是CheckBoxList控件:<asp:CheckBoxList ID="ChbQueryUser" runat="server">
                                    </asp:CheckBoxList>
这里是触发全选事件的a标签:<a href="javascript:void(CheckAll('ChbQueryUser'))">全选</a>
这是后台代码:protected void BtnDeleteQueryUser_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < ChbQueryUser.Items.Count; i++)
        {
            if (ChbQueryUser.Items[i].Selected == true)
            {
                int ID = Convert.ToInt32(ChbQueryUser.Items[i].Value);
                am.DeleteAuthority(ID, 1);
                bind();
                bindQuery();
            }
        }
    }
点击全选选中全部项,但是后台处理的时候只能处理第一个被选中的项,然后下一个被选中的项就检测不到跳出了循环,我的js是小白,有知道的朋友希望不吝赐教。谢谢

解决方案 »

  1.   


    楼主一共有几个checkbox啊,你input获取的是HTML的标签,asp.net的应该不是这样的,你最好把代码全站出来,我看看
      

  2.   

    总共是有4个CheckBoxList控件,不过你看代码中&& aa[i].name.indexOf(chb) > -1这一句,是先把所有的CheckBoxList都找到,然后根据CheckBoxList的ID来进行选择的,所以不会弄混。现在的问题是可以找到并且全部选中,但是在button按钮的事件里面只能检测到第一个被选中的项,其他的检测不到。如果还没明白的话我把全部代码都发出来好把。谢谢你的回复
      

  3.   

    我这里没问题啊,后台获取的selected都是true
      

  4.   

    我看了一天了,在其他网站里面测试的时候都是没问题的,但是在我这里出现了问题,问题是当处理完一个被选中的项以后,CheckBoxList就貌似刷新了。所有被选中的项都没了,连CheckBoxList.Items.Count都变了。我不明白这是什么问题。正常来说是不会刷新的。
      

  5.   

    if (ChbQueryUser.Items[i].Selected == true)
                {
                    int ID = Convert.ToInt32(ChbQueryUser.Items[i].Value);
                    am.DeleteAuthority(ID, 1);
                    bind();//这是什么?是不是又重新绑定了一次数据?
                    bindQuery();
                }
      

  6.   

    你在执行完一个删除操作之后,又对数据进行了重新绑定,那么你原先的选中信息就不会再有了。你把你的绑定数据控件放到UpdatePanel中就可以了。
      

  7.   

    或者你这么写试试:protected void BtnDeleteQueryUser_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < ChbQueryUser.Items.Count; i++)
            {
                if (ChbQueryUser.Items[i].Selected == true)
                {
                    int ID = Convert.ToInt32(ChbQueryUser.Items[i].Value);
                    am.DeleteAuthority(ID, 1);
                }
            }
            //如果你这里确实是数据重新绑定的话
            bind();
            bindQuery();
        }