в радио-кнопке html отсутствует проверенный атрибут, хотя firebug указывает, что он отмечен - PullRequest
3 голосов
/ 27 февраля 2012

Заранее благодарим вас за потраченное время.

Краткое изложение постановки проблемы : в HTML-файле переключателя в браузере не отображается проверенный атрибут, но Firebug указывает, что проверенный атрибут радиоустановлен как проверено

Проверено на

Broswer: FF 3.6.18 и IE8 jQuery: 1,5 MVC3 (Razor)

Подробности

Использование MVC3 (с Razor) Я рендерил следующие переключатели с сервера.Желаемая функциональность заключается в том, что при проверке одного радиоустройства другое не должно быть проверено, и наоборот.Другими словами, пользователю разрешено выбирать только одну опцию - скажем, val1 или val2.

<div id="myRadioList">
    <div>
        <input type="radio" value="val1" onclick="updateFunctionCalledHere(this)" name="myRadioName" id="myRadioName_val1" checked="checked">

    </div>
    <div>
        <input type="radio" value="val2" onclick="updateFunctionCalledHere(this)" name="myRadioName" id="myRadioName_val2">
    </div>
</div>

Что я наблюдаю, так это то, что если пользователь переключает выбранное радио, то вновь выбранное радио (скажем,myRadioName_val2) показано, что проверяется с помощью firebug, но HTML по-прежнему отражает другой переключатель, как проверено.Из-за этого некоторые другие проверки не выполняются.

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

Это то, что яя делаю, чтобы установить текущее радио, которое не работает

$("#myRadioList > div > input[value='myRadioName_val2]').attr('checked', 'checked');

Я упрощаю свой код, чтобы не публиковать ненужные подробности.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 27 февраля 2012

Атрибут checked в HTML является значением по умолчанию.Свойство checked в JavaScript относится к текущему состоянию переключателя.

Обычно лучше разрешить браузеру обрабатывать состояние переключателей и флажков checked, а неустановить его самостоятельно, иначе вы столкнетесь с такими проблемами.Можно получить текущее состояние через prop("checked"), как уже предлагалось, или через .is(":checked").

Возможно, вы захотите использовать синтаксис, такой как $('#myRadioList').find('input[value="myRadioName_val2"]') или, что еще лучше, $('#myRadioName_val2'), поскольку дочерние селекторы в jQuery могут быть довольно медленными, поскольку они читаются справа налево.

4 голосов
/ 27 февраля 2012

Вы должны использовать

$("#myRadioList > div > input[value=myRadioName_val2]").prop('checked', true);
0 голосов
/ 27 февраля 2012

Что ж, у вас есть синтаксическая ошибка при использовании селектора jQuery. Должно быть:

$('#myRadioList > div > input[value="myRadioName_val2"]')
...