jQuery и группы переключателей

В jQuery я хотел бы выбрать все группы переключателей, где кнопки не отмечены.

Или есть ли способ, которым я могу выбрать все группы переключателей и перебирать группы?

Я динамически добавляю N групп переключателей на страницу и заранее не знаю, какими будут имена групп переключателей.


person jbenckert    schedule 22.07.2009    source источник


Ответы (3)


Чтобы найти все радиогруппы:

var radio_groups = {}
$(":radio").each(function(){
    radio_groups[this.name] = true;
})

чтобы узнать, какая радиогруппа имеет флажки для радио, а какая нет:

for(group in radio_groups){
    if_checked = !!$(":radio[name='"+group+"']:checked").length
    alert(group+(if_checked?' has checked radios':' does not have checked radios'))
}
person duckyflip    schedule 22.07.2009
comment
что значит !! стоять и почему? - person Sven Larson; 11.04.2010
comment
Я знаю, что это старо, но это так мне помогло! Я просто хотел простой способ убедиться, что каждая из моих групп переключателей была выбрана, и вот он. - person LittleTreeX; 07.03.2011
comment
Потрясающий. Именно то, что я искал! +1 - person Mirko; 18.04.2011

Поддержка нескольких групп и предварительно проверено.

$('input').click(function() {
    var $t = $(event.target);
    if ($t.hasClass('checked')) $t.removeAttr('checked');
    else $('input[type="radio"][name="' + $t.prop('name') + '"]').not($t).removeClass('checked');
    $t.toggleClass('checked');
}).filter(':checked').addClass('checked');​

```

Доказательство: http://jsfiddle.net/abrkn/PGW2Z/

person abrkn    schedule 30.09.2012

Чтобы выбрать все радиостанции по имени группы и получить только список различных имен:

    function selectRadioByGroupName() {
        return $.unique($('input:radio').map(function(index, element) {
            return this.name;
        }));
    }

Пример фрагмента:

function selectRadioByGroupName() {
  return $.unique($('input:radio').map(function(index, element) {
    return this.name;
  }));
}



$(function () {
  selectRadioByGroupName().each(function(index, element) {
    $('body').append($('<p>First Group name is: ' + element + '</p>'));
  });
});
<script src="https://code.jquery.com/jquery-1.12.1.min.js"></script>

<form action="">
    <p>
        Q1:
    </p>
    <input type="radio" name="gender" value="male"> Male<br>
    <input type="radio" name="gender" value="female"> Female<br>
    <input type="radio" name="gender" value="other"> Other
    <br />
    <p>
        Q2:
    </p>
    <input type="radio" name="status" value="male"> Single<br>
    <input type="radio" name="status" value="female"> Married<br>
    <input type="radio" name="status" value="other"> Other
    <br />
    <input type="button" name="submit_id" value="Submit" onclick="submitAnswers()">
</form>

После получения разных имен групп их можно циклически переключать.

person gaetanoM    schedule 05.04.2016