代码之家  ›  专栏  ›  技术社区  ›  Bryan

如何使用jquery计算网格视图所有页面上的复选框?

  •  1
  • Bryan  · 技术社区  · 16 年前

    我想立即更新一个状态行,指示ASP.NET网格视图所有页面上的复选框数。现在,我只能巧妙地计算当前网格视图页面上选中的复选框的数量。

    这是我的代码:

    $(document).ready(initAll);
    
    function initAll(){
       countChecked();
        $(".activeBoxes").click(countChecked);
    }
    
    function countChecked() {
    
          var n = $(".activeBoxes input:checked").length;
          $("#checkboxStatus").text(n + (n == 1 ? " vehicle is" : " vehicles are") + " selected on this page.  ");
          if( n == 0){
               $(".activateButton").hide();
               $("#checkboxStatus").hide();
    
          }else{
            $("#checkboxStatus").show();
            $(".activateButton").show();
          }
    
    }
    
    5 回复  |  直到 13 年前
        1
  •  0
  •   Jobo    16 年前

    在页面上保留一个隐藏的文本字段,每当您选中一个框时,调用一个将复选框的“id”写入隐藏字段的javascript方法。每次回发页面时,将隐藏字段的值序列化到所需对象结构(无论是对象、哈希表、数组等)中的会话。

    在呈现页面时,每个复选框都可以检查会话对象结构(您以前创建的),并确定该复选框的状态是否为上次选中状态。

    可以使用jquery循环浏览页面上的所有复选框,如果选中该复选框,则递增计数器。

        2
  •  0
  •   steve    16 年前

    您可以在页面更改时在视图状态(或类似情况)中跟踪总选择。我做了类似的事情,跟踪数组中选定的行ID。在我的例子中,当他们返回页面时,我必须重新检查项目。此外,如果允许排序,则所选内容可能会跨页面移动。

    编辑:抱歉,这实际上不是您的jquery问题,但它可能会有帮助…

        3
  •  0
  •   steve    16 年前

    您缺少的是删除ID。检查行和tempid时,请确保它不在saveid中。

        4
  •  0
  •   balexandre    16 年前
        5
  •  0
  •   Jason Plank Maksim Kondratyuk    13 年前

    我正在使用ViewState跟踪所有页面上的所有选中项,并在返回页面时重新检查它们。

    我必须将viewstate值添加到页面总计中,并以某种方式减去重叠的总计。因为我的jquery不包含ID,所以这很棘手。

    protected ArrayList savedIds;
     if (ViewState["SavedIds"] == null) savedIds = new ArrayList();
            else savedIds = (ArrayList)ViewState["SavedIds"];
    
    List<int> activateList = new List<int>();
    
            foreach (GridViewRow tt in GridView2.Rows)
            {
                CheckBox cb = (CheckBox)tt.FindControl("ActivateItem");
                HiddenField id = (HiddenField)tt.FindControl("IdField");
                if (cb.Checked)
                {
                    int tempId = 0;
                    string tempId2 = id.Value.ToString();
                    int.TryParse(tempId2, out tempId);
                    activateList.Add(tempId);
                }
    
            }
            foreach (int activateId in activateList)
            {
                if (!savedIds.Contains(activateId.ToString())) savedIds.Add(activateId.ToString());
            }
            ViewState["SavedIds"] = savedIds;