是这样的,我现在有一组数据如:
□全选         编号        编码                项目名称          
□选中          1       1000101                主闸维修
□选中          2          100010101              主闸维修一
□选中          3          100010102              主闸维修二
□选中          4          100010103              主闸维修三
□选中          5          100010104              主闸维修四
我现在想实现的是,点击全选,所有的项目均被选中;点击第一个选中,也就是编码为1000101的那行,我想能让下面的10001开头的都选中,想取消仅仅剩一个维修名称也行
这个用JavaScript和服务器端军事怎么实现?

解决方案 »

  1.   

    var checks=document.getElementsByTagName("input")
    for(var i=0;i<checks.length;++i)
    {
    if(checks[i].type=="checkbox")checks[i].checked=true;
    }
    ..............
    大概这样子
      

  2.   

    □全选服务器控件,AUTOPOST=TRUE
    选中状态改变回服务器查找控件全部选中.
      

  3.   

    我想全选你应该是没问题了,你可以把编码赋值给给checkbox的value 点击第一个的时候对value值做一个判断看时候包含第一个的value值就选中
      

  4.   


    protected void cbtSelect_CheckedChanged(object sender, EventArgs e)
        {        int intCount = dvList.Rows.Count;
            string strItemChildID = "";
            string strselectItemID = "";
            for (int i = 0; i < intCount; i++)
            {
                CheckBox cbtSelect = (CheckBox)dvList.Rows[i].FindControl("cbtSelect");
                if (cbtSelect.Checked)
                {
                    strItemChildID = dvList.Rows[i].Cells[2].Text.Trim(); //工序编码
                    if (strItemChildID == "&nbsp;") strItemChildID = "";
                }
            }
             if(strItemChildID.Replace("&amp;nbsp;", "") !="")
             {
                string strsql = "select Count(*) from t_RepairItemDetail where ItemID like '" + strItemChildID.Replace("&amp;nbsp;", "") + "%'";
                if (Convert.ToInt16(DBHelp.ExecuteScalar(strsql)) > 0)
                {                CheckBox cbttSelect = (dvList.FindControl("cbtSelect")) as CheckBox;
                    strselectItemID = "Declare @Max1 varchar(100) " +
                                            "set @Max1=''" +
                                            " select @Max1=@Max1+ItemID+',' from t_RepairItemDetail where ItemIDParentID = '" + strItemChildID.Replace("&amp;nbsp;", "") + "' order by ItemID " +
                                            " select @Max1";               // strselectItemID = "select ItemID from t_RepairItemDetail where ItemIDParentID = '1000201' order by ItemID";
                    if (Convert.ToString(DBHelp.ExecuteScalar(strselectItemID)) != null)
                    {
                        string strItemIDs = Convert.ToString(DBHelp.ExecuteScalar(strselectItemID));
                        //Response.Write("<script>alert('"+ strItemIDs +"');</script>");
                        for (int j = 0; j < intCount; j++)
                        {
                            if (strItemIDs.IndexOf(dvList.Rows[j].Cells[2].Text.Replace("&amp;nbsp;", "")) != -1)
                            {
                                ((CheckBox)dvList.Rows[j].FindControl("cbtSelect")).Checked = true;
                            } 
                        }
                       
                    }
                }
                else if (Convert.ToInt16(DBHelp.ExecuteScalar(strsql)) == 0)
                {
                    CheckBox cbttSelect = (dvList.FindControl("cbtSelect")) as CheckBox;
                    strselectItemID = "Declare @Max1 varchar(100) set @Max1=''" +
                                      " select @Max1=@Max1+ItemID+',' from t_RepairItemDetail where ItemID = '" + strItemChildID.Replace("&amp;nbsp;", "") + "' order by ItemID select @Max1";                string strItemIDs = Convert.ToString(DBHelp.ExecuteScalar(strselectItemID));                for (int k = 0; k < intCount; k++)
                    {
                        if (strItemIDs.IndexOf(dvList.Rows[k].Cells[2].Text.Replace("&amp;nbsp;", "")) != -1)
                        {
                            ((CheckBox)dvList.Rows[k].FindControl("cbtSelect")).Checked = true;
                        }
                        else
                        {
                            ((CheckBox)dvList.Rows[k].FindControl("cbtSelect")).Checked = false;
                        }
                    }
                }
                }
          else
          {
            for (int k = 0; k < intCount; k++)
            {
               ((CheckBox)dvList.Rows[k].FindControl("cbtSelect")).Checked = false;
            }      }
        }
      }
      

  5.   

    不太清楚lz想实现什么效果,只是选中的话应该不难啊function allCheck(){
        $("#main input[type='checkbox']").each(function(){
             this.checked=true;
        });
    }
      

  6.   

        <table id="tb">
            <tr>
                <th>
                    <input type="checkbox" id="all" />
                </th>
                <th>
                    编号
                </th>
                <th>
                    编码
                </th>
                <th>
                    项目名称
                </th>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="checkbox" value="100010" />
                </td>
                <td>
                    1
                </td>
                <td>
                    1000101
                </td>
                <td>
                    主闸维修
                </td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="checkbox" value="100010101" />
                </td>
                <td>
                    1
                </td>
                <td>
                    100010101
                </td>
                <td>
                    主闸维修
                </td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="checkbox" value="100010102" />
                </td>
                <td>
                    2
                </td>
                <td>
                    100010102
                </td>
                <td>
                    主闸维修
                </td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="checkbox" value="100010103" />
                </td>
                <td>
                    3
                </td>
                <td>
                    100010103
                </td>
                <td>
                    主闸维修
                </td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="checkbox" value="100010104" />
                </td>
                <td>
                    4
                </td>
                <td>
                    100010104
                </td>
                <td>
                    主闸维修
                </td>
            </tr>
        </table>
        <script type="text/javascript">
        var selectAll = document.getElementById("all");
        var checkboxes = document.getElementsByName("checkbox");
        document.getElementById("tb").onclick = function(e)
        {
           e = e || window.event;
           t = e.target || e.srcElement;
           if(t.tagName != "INPUT") return;
           if(t.id == "all")
           {
                for(var i = 0 ; i < checkboxes.length; i ++ ) checkboxes[i].checked = t.checked
           }
           else
           {
                var count = 0 ;
                for(var i = 0 ; i < checkboxes.length ; i ++)
                {
                    if (t == checkboxes[i]) continue;
                    if(checkboxes[i].value.indexOf(t.value) != -1) checkboxes[i].checked = t.checked
                }
           }
        }
        
        </script>
      

  7.   

    可以的,只要checkbox的id规则设计一致就可以实现。
      

  8.   

    这样的效果在页面端实现即可,使用JavaScript可能会写得有点多,推荐用jQuery写,代码量很少,速度也很快。原理:
    1. 待HTML页面加载完成后,所有checkbox不选中。
    2. 当勾选“全选”的checkbox时,所有checkbox选中。当不选中其中一个checkbox时,全选checkbox不选中。
      

  9.   

    点击第一个选中,也就是编码为1000101的那行,我想能让下面的10001开头的都选中,想取消仅仅剩一个维修名称也行没有仔细看你的代码
    选中1000101 截取前5位呗。SubString()然后遍历 取值控件值 -> 判断控件值是否包含10001->是的话勾选->不是的话不处理
      

  10.   

    $("全选id").click(function(){
    $("input [type='checkbox']").attr("checked",$("全选id").attr("checked"));
    });
      

  11.   

                    function checkall(t)
                    {
                    var all = document.getElementsByTagName("input");
                    for (var i=0;i<all.length;i++)
                    {
                         if (all[i].type=="checkbox")
                    {
                         all[i].checked=t.checked;
                    }
                    }
                    }
    调用:
    在全选的那个checkbox的onclick事件中
    onclick="checkall(this)";
      

  12.   

    做了个DEMO基本实现了
     <script type="text/javascript">
            function selectAll() {
                // 获得用户页面中的所有的 输入功能的控件getElementById("ChkSelect").
                var checkbox = document.getElementsByTagName("input");
                if (checkbox[0].checked == true) {
                    for (var i = 0; i < checkbox.length; i++)
                        checkbox[i].checked = false;
                }
                else {
                    for (var i = 0; i < checkbox.length; i++)
                        checkbox[i].checked = true;
                }
            }    </script>
     <asp:Repeater ID="Repeater1" runat="server">
        <HeaderTemplate>
            <tr>
            <th scope="col"><input id="Checkbox1" type="checkbox" onclick='selectAll()' /></th>      
            <th scope="col">Product</th>       
            <th scope="col">Version</th>       
            <th scope="col">Description</th>
             <th scope="col">No</th>
            </tr>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td >  <asp:CheckBox id='ChkSelect'  AutoPostBack="true" runat="server"    Text='<%#Eval("ID")%>'  oncheckedchanged="ChkSelect_CheckedChanged"/></td>
            
                <td ><%#Eval("Product")%></td>
             
                <td ><%#Eval("Version")%></td>
             
                <td ><%#Eval("Description")%></td>
                  <td ><asp:Literal ID="lbTest" runat="server" Text='<%#Eval("No")%>'></asp:Literal> </td>
            </tr>
        </ItemTemplate>
        </asp:Repeater> 
     protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindTest();
            }
        }    public void BindTest()
        {
            DataTable tblDatas = new DataTable("Datas");
            DataColumn dc = null;
            dc = tblDatas.Columns.Add("ID", Type.GetType("System.Int32"));
            dc.AutoIncrement = true;//自动增加
            dc.AutoIncrementSeed = 1;//起始为1
            dc.AutoIncrementStep = 1;//步长为1
            dc.AllowDBNull = false;//        dc = tblDatas.Columns.Add("Product", Type.GetType("System.String"));
            dc = tblDatas.Columns.Add("Version", Type.GetType("System.String"));
            dc = tblDatas.Columns.Add("Description", Type.GetType("System.String"));
            dc = tblDatas.Columns.Add("No", Type.GetType("System.Int32"));
            DataRow newRow;
            newRow = tblDatas.NewRow();
            newRow["Product"] = "大话西游";
            newRow["Version"] = "2.0";
            newRow["Description"] = "我很喜欢";
            newRow["No"] = "1000101";
            tblDatas.Rows.Add(newRow);        newRow = tblDatas.NewRow();
            newRow["Product"] = "梦幻西游";
            newRow["Version"] = "3.0";
            newRow["Description"] = "比大话更幼稚";
            newRow["No"] = "100010101";
            tblDatas.Rows.Add(newRow);
            Repeater1.DataSource = tblDatas;
            Repeater1.DataBind();    }
        protected void ChkSelect_CheckedChanged(object sender, EventArgs e)
        {
            string ss = string.Empty;
            for (int i = 0; i < this.Repeater1.Items.Count; i++)
            {
                //客户端
                CheckBox chb = (CheckBox)this.Repeater1.Items[i].FindControl("ChkSelect");
                Literal ltNo = Repeater1.Items[i].FindControl("lbTest") as Literal;
                if (chb.Checked == true)
                {
                    ss = ltNo.Text;
                }
                if (ltNo.Text.Contains(ss))//这里你自己在改成你需要的。
                {
                    chb.Checked = true;
                }
            }
         
        }
      

  13.   

    纠正下  if (ltNo.Text.Contains(ss))//这里你自己在改成你需要的。
    这里用Equals
    Equals :
    确定此实例是否与另一个指定的 String 对象具有相同的值。
    http://msdn.microsoft.com/zh-cn/library/858x0yyx.aspx
      

  14.   

    擦又弄错了。还是用if (ltNo.Text.Contains(ss))吧
      

  15.   

    就是这样,点击子项目中的任意一项父项目选中,点击父项目,子项目全选中,但是子项目可以全部去掉,只剩下父项目,不想后台触发事件,就想用JavaScript脚本实现,但是不知道该如何下手开始解决,我哪里有个方案是触发复选框的SELECTCHANGE事件,但是这个需要用到循环,也就是上面我写那个代码,看着很不好,有没有别的方法,各位大侠各显神通吧,3Q
      

  16.   

    这些都是在嵌套的GridView中进行的,复选框是嵌套在GridView中的
    代码如下:<asp:GridView ID="dvList" runat="server" AutoGenerateColumns="False" 
                Width="685px">
            <Columns>
            <asp:TemplateField>
            <HeaderTemplate>
            <asp:CheckBox ID="cbtSelectAll" runat="server" Text="全选"/>
            </HeaderTemplate>
            
            <ItemTemplate>
            <asp:CheckBox ID="cbtSelect" runat="server" Text="选中" OnCheckedChanged="cbtSelect_CheckedChanged" AutoPostBack="true"/>
            </ItemTemplate>
            </asp:TemplateField>       <asp:BoundField DataField="id" HeaderText="编号"/>
           <asp:BoundField DataField="NewItemNode" HeaderText="项目编号"/>
           <asp:BoundField DataField="NewItemNodeName" HeaderText="项目编号"/>
           <asp:BoundField DataField="ItemStandHours" HeaderText="项目工时"/>
           <asp:BoundField DataField="ItemOrder" HeaderText="工序"/>
       
            </Columns>
            </asp:GridView>
      

  17.   


    web服务端控件把onclick改成onclientclick="checkall(this)";