如何遍历单选按钮列表

时间:2011-04-13 20:50:58

标签: jquery asp.net radiobuttonlist

我在网上搜索并没有找到一个在.net中选择radiobuttonlist控件的好方法 所以我在每个radiobuttonlist中添加一个类,并使用类选择器循环每个,但是,似乎只要一个更改,所有更改。请参阅我的代码如下: 这是jQuery的一部分:

function Checkform() {
    result=true;
    $('.rbl').each(function() {
            var cc = $(this + "[checked]").val();
            if (cc == undefined) {
                result = false;
                return false;
            }
        });
        return result;
    }

这是网络部分:

<form id="form1" runat="server" onsubmit="return Checkform();">
<asp:RadioButtonList ID="RadioButtonList1" class="rbl"  runat="server">
        <asp:ListItem>1</asp:ListItem>
        <asp:ListItem>2</asp:ListItem>
        <asp:ListItem>3</asp:ListItem>
    </asp:RadioButtonList>

    <asp:RadioButtonList ID="RadioButtonList2" class="rbl" runat="server" 
        RepeatDirection="Horizontal">
        <asp:ListItem>1</asp:ListItem>
        <asp:ListItem>2</asp:ListItem>
        <asp:ListItem>3</asp:ListItem>
        <asp:ListItem>4</asp:ListItem>
    </asp:RadioButtonList>

我想要做的是在提交表单之前检查所有radiobuttonlist控件是否具有其选定值。但它的工作方式就像一个人选择了值,无论天气另一个人选择了值,该函数都会返回true。请帮我解决这个问题。提前谢谢。

4 个答案:

答案 0 :(得分:12)

这个怎么样:

function Checkform() {
    var result = true;
    $('.rbl').each(function() {
        var checked = $(this).find('input:radio:checked');
        if (checked.length == 0) {
            result = false;
            return;
        }
    });
    return result;
}

这将检查每个组并确定是否在该组中选择了radiobuttom。键是$(this).find('..'),它返回当前组中的所有“已选中”单选按钮,如果没有选中,则返回零,如果选择了1,则为1。

答案 1 :(得分:1)

是的,您的函数将返回true,因为它首先假设其条件为“true”。当它循环通过“RadioButtonList1”并找到一个被选中的控件时(默认情况下我假设一个控件),它也将返回true。

请尝试以下代码:

var checkedRadioButtons = $('#form1 .rbl input:checked');

此行仅返回其值设置为选中的单选按钮。然后,您可以迭代这些元素以获取更多信息,例如它们的值:

checkedRadioButtons.each(function(Index){
   return $(this).val();
});

答案 2 :(得分:0)

这将验证每个RadioButtonList是否有一个选中的项目。因此,如果有2个列表和2个已检查的项目,则返回true。

function Checkform() {
    return $(".rbl :checked").length == $(".rbl:has(:radio)").length
}

答案 3 :(得分:0)

如果我正确理解您的问题,您需要确保在提交之前每个RadioButtonList都选择了一些内容。有几种方法可以实现这一目标。

看起来你正在使用WebForms,所以你不需要触摸jQuery,你可以使用RequiredFieldValidator(每个RadioButtonList一个)来完成这个任务,你就可以了。< / p>

如果你想采用jQuery方式,那么你可以更容易地将你的问题想象为“任何RadioButtonLists没有选择一个项目。”为了回答你:

  1. 选择具有相应类

  2. 的所有单选按钮
  3. 获取一个不同的名称列表(就像单选按钮的分组一样)。有many种方法可以实现这一目标,有些方法比其他方法更容易。您可以使用map实用程序创建名称列表(然后您可以将其区分开来)

    var all = $.map( 
        $(".rbl input:radio"),
        function(n, i){ return n.attr("name") }
    );
    
  4. 选择具有相应类别的所有checked单选按钮(因为它是一个单选按钮列表,一次不能有多个checked元素,因此它们将是唯一的)

    var selected = $(".rbl input:radio:checked")
    
  5. 比较列表以查看它们是否大小相同。如果它们是,那么每个列表都选择了一个项目,如果它们不是,那么至少一个列表没有选择任何项目。您可以使用map实用程序将其转换为名称列表,但这不是必需的,因为您只是比较数组长度。

  6. 如果您还想知道哪个单选按钮列表没有选定值,则需要在步骤3的数组上应用map实用程序,然后查看哪些名称在all但不在selected