как установить опцию радио проверено на загрузку с помощью jQuery

297

Как установить опцию радио проверяется на загрузку с помощью jQuery?

Необходимо проверить, не установлено ли значение по умолчанию, а затем установить значение по умолчанию

Фил Паффорд
источник
1
@ryenus не будет ли другой вопрос дубликатом моего, так как я задал свой перед другим вопросом?
Фил Паффорд

Ответы:

559

Скажем, у вас были такие радио-кнопки, например:

<input type='radio' name='gender' value='Male'>
<input type='radio' name='gender' value='Female'>

И вы хотели проверить значение со значением «Мужской» onload, если радио не проверено:

$(function() {
    var $radios = $('input:radio[name=gender]');
    if($radios.is(':checked') === false) {
        $radios.filter('[value=Male]').prop('checked', true);
    }
});
Паоло Бергантино
источник
Просто интересно, Паоло, IIRC спецификация говорит, что проверенный атрибут должен быть проверен = "проверен" (хотя я могу ошибаться). В этом примере jQuery переводит true в 'selected'? Просто любопытно ...
Алекс
8
Мой оригинальный пример «проверил», «проверил», это одна из тех вещей, которые я никогда не могу вспомнить, какая из них правильная. jQuery выясняет это в любом случае, но я знаю, что если вы хотите установить фактический проверяемый атрибут элемента DOM, он должен быть логическим, например, document.getElementById ('x'). check = true; - так что я пошел с этим.
Паоло Бергантино
просто хочу добавить эту квадратную скобку, обозначение [имя = пол] не работает в стандартном браузере Windows Phone 7.
目 白 目
Я только что попробовал это с FF и jQuery 1.9.1 и .attr ('флажок', правда); не работает, однако .prop ('check', true); делает. посмотрите на stackoverflow.com/questions/4618733/… (дубликаты?)
IARI
Быстрый: НЕ используйте $radios.removeAttr('checked')перед опорой. Это спутает браузер и опубликованные значения.
igasparetto
110

Как насчет одного лайнера?

$('input:radio[name="gender"]').filter('[value="Male"]').attr('checked', true);
Эндрю МакКомб
источник
Вышеприведенное лучше, так как поддерживает более сложные значения имен.
Дж. Мартин
13
Это не полностью отвечает на вопрос ops - необходимо проверить, проверена ли опция по умолчанию в первую очередь. Также вы должны теперь использовать prop () вместо attr () для такого рода вещей. Для объяснения см. Раздел «Атрибуты и свойства» здесь: api.jquery.com/prop . Также нет необходимости в дополнительном фильтре, вы можете просто объединить 2 селектора, например, $ ("input [name = пол] [value = Male]"). Prop ("checked", true);
Jackocnr
3
Это решение работает в первый раз, когда я включаю радио, но потом отказывает. Используя «prop» вместо «attr», он работает отлично. Итак: $ ('input: radio [имя = "пол"]'). Filter ('[value = "Male"]'). Prop ('checked', true);
Андрей
2
Correct - prop () теперь рекомендуемый метод для доступа к свойствам.
Эндрю Маккомб
1
Проще: $ ('input: radio [имя = "пол"] [value = "мужчина"]'). Attr ('флажок', правда);
Режис
52

Это приведет к ошибке form.reset ():

$('input:radio[name=gender][value=Male]').attr('checked', true);

Но этот работает:

$('input:radio[name=gender][value=Male]').click();
Чайко
источник
5
Я бы порекомендовал вам использовать триггер («щелчок») немного более читабельным и останавливает вызов метода.
Barkermn01
35

На самом деле JQuery имеет два способа установить проверенный статус для радио и флажков, и это зависит от того, используете ли вы значение атрибута в разметке HTML или нет:

Если у них есть атрибут value:

$("[name=myRadio]").val(["myValue"]);

Если у них нет атрибута значения:

$("#myRadio1").prop("checked", true);

Подробнее

В первом случае мы указываем всю группу радио, используя имя, и сообщаем JQuery, чтобы найти радио для выбора, используя функцию val. Функция val принимает массив из 1 элемента и находит радио с соответствующим значением, устанавливает его флажок = истина. Другие с таким же именем будут отменены. Если радиопередача с соответствующим значением не найдена, все будут отменены. Если имеется несколько радиостанций с одинаковым именем и значением, то будет выбрана последняя, ​​а другие будут отменены.

Если вы не используете атрибут значения для радио, вам нужно использовать уникальный идентификатор для выбора определенного радио в группе. В этом случае вам нужно использовать функцию prop, чтобы установить свойство «checked». Многие люди не используют атрибут value с флажками, поэтому # 2 больше подходит для флажков, чем для радио. Также обратите внимание, что, поскольку флажки не образуют группу, когда они имеют одинаковые имена, вы можете сделать $("[name=myCheckBox").prop("checked", true);для флажков.

Вы можете поиграть с этим кодом здесь: http://jsbin.com/OSULAtu/1/edit?html,output

Шиталь шах
источник
22

Мне понравился ответ @Amc. Я обнаружил, что выражение можно сжать дальше, чтобы не использовать вызов filter () (@chaiko, по-видимому, тоже это заметил). Кроме того, prop () - это путь против attr () для jQuery v1.6 +, см. Документацию jQuery для prop () для ознакомления с официальными рекомендациями по этому вопросу.

Рассмотрим те же теги ввода из ответа @Paolo Bergantino.

<input type='radio' name='gender' value='Male'>
<input type='radio' name='gender' value='Female'>

Обновленная строка может читать что-то вроде:

$('input:radio[name="gender"][value="Male"]').prop('checked', true);
clayzermk1
источник
15

Я думаю, вы можете предположить, что это имя уникально, и все радио в группе имеют одно и то же имя. Тогда вы можете использовать поддержку jQuery следующим образом:

$("[name=gender]").val(["Male"]);

Примечание: передача массива важна.

Условная версия:

if (!$("[name=gender]:checked").length) {
    $("[name=gender]").val(["Male"]);
}
Сары
источник
1
Это плохо, что вы сканируете каждый элемент на предмет значения, которое я не рекомендую, это используется когда-либо
Barkermn01
@MartinBarker Можете ли вы объяснить, что вы, мужчины, «сканируете»?
Сарам
Выполняя поиск в DOM, если вы используете только атрибут, который заставляет jQuery идти, хотя каждый элемент в DOM и проверка на совпадение совпадают, как если бы вы его использовали, $("*")он совпадал бы со всем, поэтому вы должны использовать тип в аренду $("input")или ID будет быть идеальным, так как DOM имеет собственные вызовы для получения элемента по id
Barkermn01
@MartinBarker - согласен. Обычно я ставлю префикс селектора с идентификатором формы или предоставляю контекстный параметр. В настоящее время сканирование DOM - это не работа jQuery, а встроенный движок браузера, document.querySelectorAllвыполняющий всю работу.
Сарам
Для решения вышеуказанных проблем используйте $("input[name=gender]")или $("input[name=gender]:radio")или (для современных браузеров)$("input[name=gender][type=radio]")
David Balažic
7

Если вы хотите, чтобы оно было действительно динамичным, и выберите радио, которое соответствует входящим данным, это работает. Он использует значение пола переданных данных или использует значение по умолчанию.

if(data['gender'] == ''){
 $('input:radio[name="gender"][value="Male"]').prop('checked', true);
}else{
  $('input:radio[name="gender"][value="' + data['gender'] +'"]').prop('checked', true);
};
WildSpidee
источник
5

Собственное решение JS:

 document.querySelector('input[name=gender][value=Female]').checked = true;

http://jsfiddle.net/jzQvH/75/

HTML:

<input type='radio' name='gender' value='Male'> Male
<input type='radio' name='gender' value='Female'>Female
Разан Пол
источник
3

И если вы хотите передать значение из вашей модели и выбрать радиокнопку из группы по нагрузке в зависимости от значения, используйте:

Jquery:

var priority = Model.Priority; //coming for razor model in this case
var allInputIds = "#slider-vertical-" + itemIndex + " fieldset input";

$(allInputIds).val([priority]); //Select at start up

И HTML:

<div id="@("slider-vertical-"+Model.Id)">
 <fieldset data-role="controlgroup" data-type="horizontal" data-mini="true">
    <input type="radio" name="@("radio-choice-b-"+Model.Id)" id="@("high-"+Model.Id)" value="1" checked="checked">
    <label for="@("high-"+Model.Id)" style="width:100px">@UIStrings.PriorityHighText</label>

    <input type="radio" name="@("radio-choice-b-"+Model.Id)" id="@("medium-"+Model.Id)" value="2">
    <label for="@("medium-"+Model.Id)" style="width:100px">@UIStrings.PriorityMediumText</label>

    <input type="radio" name="@("radio-choice-b-"+Model.Id)" id="@("low-"+Model.Id)" value="3">
    <label for="@("low-"+Model.Id)" style="width:100px">@UIStrings.PriorityLowText</label>
 </fieldset>
</div>
Iftikhar
источник
2

Мне не нужно все это. С простым и старым HTML вы можете достичь того, что вы хотите. Если вы разрешите радио, которое вы хотите, проверено по умолчанию следующим образом:
<input type='radio' name='gender' checked='true' value='Male'>
Когда страница загрузится, она будет проверена.

Карлос Торрес
источник
3
да, но мне нужно, чтобы он был динамическим, так как ссылающийся сайт передавал бы значения по умолчанию при загрузке страницы. Я давно думал об этом вопросе, поэтому надеюсь, что я понимаю, что вы пытаетесь сказать
Фил Паффорд
2
 $("form input:[name=gender]").filter('[value=Male]').attr('checked', true);
новичок в JQuery
источник
6
Пожалуйста, не публикуйте ответы только по коду. Пожалуйста, дайте объяснение тоже.
Ли Тейлор
2

Вот пример с вышеуказанными методами:

<div class="ui-field-contain">
<fieldset data-role="controlgroup" data-type="horizontal">    <legend>Choose a pet:</legend>
    <input type="radio" name="radio-choice-2" id="radio-choice-1" value="choice1">
    <label for="radio-choice-1">Cat</label>

    <input type="radio" name="radio-choice-2" id="radio-choice-2" value="choice2">
    <label for="radio-choice-2">Dog</label>

    <input type="radio" name="radio-choice-2" id="radio-choice-3" value="choice3">
    <label for="radio-choice-3">Hamster</label>

    <input type="radio" name="radio-choice-2" id="radio-choice-4" value="choice4">
    <label for="radio-choice-4">Lizard</label>
  </fieldset>
</div>

В JavaScript:

$("[name = 'radio-choice-2'][value='choice3']").prop('checked', true).checkboxradio('refresh');
карма
источник
1

Обратите внимание на это поведение при получении значений радиовхода:

$('input[name="myRadio"]').change(function(e) { // Select the radio input group

    // This returns the value of the checked radio button
    // which triggered the event.
    console.log( $(this).val() ); 

    // but this will return the first radio button's value,
    // regardless of checked state of the radio group.
    console.log( $('input[name="myRadio"]').val() ); 

});

Поэтому $('input[name="myRadio"]').val()не возвращает проверенное значение радиовхода, как вы могли бы ожидать - оно возвращает значение первой радиокнопки.

Брэдли Флуд
источник
1

De esta forma Jquery obtiene соло el elemento проверил

$('input[name="radioInline"]:checked').val()
Джулиан М
источник
2
Вам нужно описать свой ответ и отформатировать свой код
Майкл
0

// Если вы делаете это на javascript или в фреймворке, таком как магистраль, вы часто сталкиваетесь с этим, у вас может быть что-то подобное

$MobileRadio = $( '#mobileUrlRadio' );

пока

$MobileRadio.checked = true;

не будет работать,

$MobileRadio[0].checked = true;

воля.

ваш селектор может быть так же, как другие парни выше рекомендовал тоже.

JrBriones
источник
0

Это работает для нескольких переключателей

$('input:radio[name="Aspirant.Gender"][value='+jsonData.Gender+']').prop('checked', true);
Хари Лаккакула
источник