【问题标题】:How to loop through a radio button list如何遍历单选按钮列表
【发布时间】:2011-08-05 01:20:59
【问题描述】:

网上搜了一下,没有找到.net中选择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>

我想要做的是在提交表单之前检查所有单选按钮列表控件是否都有其选定的值。但它就像一个选择了值一样,无论天气如何,该函数都会返回 true 另一个选择了值。请在这个问题上帮助我。提前谢谢你。

【问题讨论】:

    标签: jquery asp.net radiobuttonlist


    【解决方案1】:

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

    试试下面的代码:

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

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

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

    【讨论】:

    • 我认为他正在按照必填字段验证的方式做一些事情,您必须从每个列表中选择一些内容。
    • 那么如何确保两个radiobuttonlist都被选中了一个选项呢?
    • 啊。对问题的措辞有点挣扎。
    【解决方案2】:

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

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

    【讨论】:

    • 不幸的是,在他的情况下,有两个不同的列表具有相同的类。这将告诉您他们中的任何一个是否选择了某些东西,而不是两个都选择了某些东西。
    • 我知道,但我没有从描述中得知他需要那个。
    • 我更新了代码。现在它将验证所有“rbl” RadioButtonLists 都有一个选中的项目。
    • 不,不会的,看看this question,RadioButtonList 类会呈现一些非常糟糕的 HTML。
    • 我知道它是用一些时髦的 html 呈现的,但这没关系。 '$(".rbl")' 是 RadioButtonLists 的数量(即包装在表格中的 RadioButtons)。 '$(".rbl :checked")' 是“rbl”表中检查项目的数量。由于您只能在每个组中选中一个 RadioButton,因此此代码应该可以工作。
    【解决方案3】:

    这个怎么样:

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

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

    【讨论】:

      【解决方案4】:

      如果我正确理解您的问题,您希望确保每个RadioButtonList 在您提交之前都有选择的内容。有几种方法可以做到这一点。

      看起来您正在使用 WebForms,因此您不需要接触 jQuery,您可以使用 RequiredFieldValidator(每个 RadioButtonList 一个)来完成此操作,一切就绪。

      如果您想采用 jQuery 方式,那么将您的问题视为“是否有任何 RadioButtonLists 没有选择项目”会更容易。回答你:

      1. 选择所有具有相应类的单选按钮

      2. 获取不同的名称列表(这就是单选按钮的分组方式)。有many 方法可以做到这一点,有些方法比其他方法更容易。您可以使用map 实用程序创建名称列表(然后您可以区分)

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-23
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-16
        • 2013-10-23
        相关资源
        最近更新 更多