Как перебрать список переключателей - PullRequest
9 голосов
/ 14 апреля 2011

Я искал в Интернете и не нашел хорошего способа выбора элемента управления radiobuttonlist в .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>

Что я хочу сделать, это проверить, все ли элементы управления radiobuttonlist имеют выбранное значение перед отправкой формы. Но это работает так, как если бы у одного было выбранное значение, функция вернет истину независимо от того, выбрано ли другое значение. Пожалуйста, помогите мне в этом вопросе. Заранее спасибо.

Ответы [ 4 ]

12 голосов
/ 14 апреля 2011

Как насчет этого:

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, если один выбран.

1 голос
/ 14 апреля 2011

Да, ваша функция вернет true, потому что она начинает, предполагая, что ее условие "true" в первую очередь. Когда он перебирает RadioButtonList1 и находит выбранный элемент управления (который, как я предполагаю, будет по умолчанию), он также возвращает true.

Попробуйте следующий код:

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

Эта строка будет возвращать только те переключатели, значение которых установлено на флажок. Затем вы можете перебрать эти элементы, чтобы получить больше информации, например, их значение:

checkedRadioButtons.each(function(Index){
   return $(this).val();
});
0 голосов
/ 14 апреля 2011

Если я правильно понимаю ваш вопрос, вы должны убедиться, что каждый RadioButtonList имеет что-то выбранное, прежде чем отправить.Есть несколько способов сделать это.

Похоже, вы используете WebForms, поэтому вам не нужно прикасаться к jQuery, вы можете сделать это с помощью RequiredFieldValidator (один длякаждый RadioButtonList) и все готово.

Если вы хотите пойти по пути jQuery, тогда вам будет проще подумать о том, что «У любого из списков RadioButtonLists НЕ выбран элемент».Чтобы ответить на него, вы:

  1. Выберите все радиокнопки с соответствующим классом

  2. Получите отдельный список имен (как, например, радиокнопкисгруппированных).Есть множество способов сделать это, некоторые проще, чем другие.Вы можете использовать утилиту 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, чтобы превратить это в список имен, но это не обязательно, поскольку вы просто сравниваете длины массивов.

Если вы также хотите узнать , какие списки переключателей не имеют выбранного значения, вам необходимо применить утилиту map к массивуиз шага 3, а затем посмотрите, какие имена находятся в all, но не в selected.

0 голосов
/ 14 апреля 2011

Это подтвердит, что каждый RadioButtonList имеет отмеченный элемент.Таким образом, если есть 2 списка и 2 отмеченных элемента, возвращается значение true.

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