Checkboxlist +获取所有复选框的ID

时间:2009-10-28 21:55:36

标签: c# asp.net mootools

如何获取复选框列表生成的所有复选框的ID,数据表作为数据源?

我想我必须使用复选框列表中的“OnDataBinding”事件,但我不知道这对我有什么帮助。

我正在使用C#

我不认为获取复选框列表生成的所有复选框的ID是可能的,所以我认为采用moo工具方式是正确的。

有什么想法吗?

由于

6 个答案:

答案 0 :(得分:1)

理想情况下,您只想将click事件处理程序附加到domReady事件中的所有复选框列表中,这将使用MooTools创建更简单的函数。但是,如果您愿意,可以将代码保持原样,只需使您的2个功能更简单。

function ToggleSelection(ctrl, sender) {
  var checkboxes = $(ctrl).getElements('input[type=checkbox]');
  checkboxes.set('checked', sender.checked);
}

function ToggleSelectAll(ctrl, sender) {
  var fAllChecked = ($(sender).getElements('input:checked').length == $(sender).getElements('input[type=checkbox]').length)
  $(ctrl).set('checked', fAllChecked);
}

您可以一次设置整个ELements数组的属性,不需要循环遍历它们。在第二个函数中,我正在检查检查的元素数量与复选框的总数,如果它们匹配,则意味着它们都被检查。

答案 1 :(得分:0)

您使用的是VB还是C#..请相应标记

您可以拥有名为strchklist

的列表或字符串

<强> VB.NET

For Each li In CheckBoxList1.Items 
       If li.Selected Then 
            strchklist += li.Id 
      End If 
  Next 

<强> C#

foreach (ListItem li in CheckBoxList1.Items){ 
       If li.Selected
            strchklist += li.Id ;}

答案 2 :(得分:0)

<asp:ListItem>实际上不是控件本身,因此没有ID。如果要在客户端脚本中访问它,请添加可以引用的新属性。 (是的,在OnDataBinding期间)请记住,这些不会在ViewState中持久存在!

你到底想要完成什么?可能会有所帮助。

答案 3 :(得分:0)

完全不同的答案......

CheckBoxList有点奇怪......与其他控件不同,它并没有真正具有明显HTML构造的逻辑映射。它实际上呈现了带有衍生ID的多个复选框。这些ID似乎生成为 CheckBoxList.ClientID +“_”+ ItemIndex

您可以通过查看页面来源来验证这一点。在内部,似乎单个复选框控件的ID只是它的索引,然后使用CheckBoxList作为其NamingContainer进行渲染。您可以使用Reflector查看CheckBoxList控件如何呈现输出。

仍然是jQuery的好地方。现在你就知道ID了。

答案 4 :(得分:0)

我今天早上醒来并想到这样做(cblUSEquities是一个复选框列表)

cblUSEquities.Attributes.Add("onclick", "javascript:alert('Clicked');");

这会将警报添加到复选框列表生成的表中。需要注意的一点是,警报会显示两次如果我单击复选框的文本,如果单击该复选框则会显示一次。我认为这个解决方案对我有用。

顺便说一下,我从没想过上面的代码会起作用......

P.S回答我自己的问题,因为我想写一些代码,我不能使用评论框。

本着StackOverFlow的精神,我找到了适用于我的场景的东西,但问题的描述有所不同?我该怎么办?编辑问题并将其标记为答案?

答案 5 :(得分:0)

我能够通过使用mootools来做到这一点,这就是代码。

function ToggleSelection(ctrl, sender)
{
    var cblCtrl = $(ctrl);
    var Allcbs = cblCtrl.getElements('input');

    for(var i=0; i<Allcbs.length; i++)
        Allcbs[i].checked = sender.checked;
}

function ToggleSelectAll(ctrl, sender)
{
    var AllTrueCount = 0;
    var cblCtrl = $(ctrl);
    var Allcbs = sender.getElements('input');

    for(var i=0; i<Allcbs.length; i++)
        if(Allcbs[i].checked)
            AllTrueCount++;

    if(AllTrueCount == Allcbs.length)
        cblCtrl.checked = true;
    else
        cblCtrl.checked = false;
}

调用javascript函数的C#代码

//Binding event to the checkbox list
cblUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelectAll('{0}', this);", chkAllUSEquities.ClientID));

//binding event to the select all checkbox
chkAllUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelection('{0}', this);", cblUSEquities.ClientID));

事实证明,我不需要知道复选框列表生成的所有复选框的ID。我能够通过这一行将onclick javascript添加到这些复选框

cblUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelectAll('{0}', this);", chkAllUSEquities.ClientID));

这会将onclick事件添加到复选框列表生成的表中。