2009-10-28 215 views
0

如何获取由checkboxlist生成的所有复选框的id,并将datatable作为其数据源?Checkboxlist +获取所有复选框的ID

我想我必须使用复选框列表中的“OnDataBinding”事件,但我不明白这对我有何帮助。

我使用C#

我不认为获得通过的复选框列表中产生的所有复选框的ID是可能的,所以我觉得要も工具的方法是做正确的事。

任何想法?

感谢

回答

1

理想情况下,您只需要将点击事件处理程序附加到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数组的属性,不需要遍历它们。在第二个函数中,我将检查检查的元素的数量与复选框的总数,如果它们匹配,则表示它们全部被检查。

+0

这绝对好得多。谢谢 – iJK 2009-10-30 17:27:50

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 ;} 
+0

对不起,忘了标记语言 – iJK 2009-10-28 22:11:38

+0

这将无法正常工作,因为ListItem没有“ID”属性。我也试过li.Attributes [“id”]并返回null。 – iJK 2009-10-28 22:18:37

0

<asp:ListItem>不是一个真正的控件本身,因此没有ID。如果您想在客户端脚本中访问它,请添加您可以引用的新属性。 (是的,在OnDataBinding期间)请记住,这些不会保留在ViewState中!

你究竟想完成什么?可能会有所帮助。

+0

我拥有的是一个复选框列表和一个单独的复选框(全选复选框)。因此,当选中全选复选框时,我需要检查复选框列表生成的所有复选框,反之亦然。所以,当复选框列表生成的复选框未被选中时,我需要取消选中全选复选框(如果选中)。 所以我想我需要知道复选框生成的复选框列表,所以这种方式我可以添加脚本来检查或取消选中全选复选框... 我希望我很清楚 – iJK 2009-10-28 23:55:05

+0

嗯,这是一个使用jQuery的好地方,如果你想做它的客户端。另外,我会为您发布替代答案。 – Bryan 2009-10-29 05:59:19

0

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

的CheckBoxList的是一个有点古怪的家伙......不同于其他控件,它并没有真正有一个逻辑映射到一个明显的HTML结构。它实际上使用派生ID呈现多个复选框。这些ID似乎产生为CheckBoxList.ClientID + “_” + 项目索引

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

仍然是jQuery的好去处。现在你更容易知道这些ID。

+0

是的,使用JQuery将会非常容易。然而,我正在为一个CMS解决方案(kentico)构建一个web部件,它与moo工具一起提供,并与JQuery冲突。 – iJK 2009-10-29 13:35:48

+0

嗨布莱恩, 我听到你说了什么,我不知道为什么我没有想到它写在“moo工具”。我认为它是因为我记得它试图确定为什么jquery不工作是多么令人沮丧。 所以我得到它的工作,但我不需要知道复选框列表生成的复选框的所有ID。 – iJK 2009-10-29 14:19:31

0

今天早晨我和这样的思想(cblUSEquities是一个复选框列表)

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

此选项将在复选框列表生成警报表中醒了过来。有一点需要注意的是,警报会显示两次如果我单击复选框的文本,并单击复选框一次。我认为这个解决方案适用于我。

顺便说一句,我从来没有想过上面的代码会工作...

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

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

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; 
} 

C#代码事实证明我并不需要知道复选框列表中产生的所有复选框的id的这调用JavaScript函数

//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)); 

。我可以通过这条线

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

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