JQuery buttonset («обновить») перестает работать после второго раза с радиокнопками

0

В моем проекте я использую следующий набор кнопок JQuery:

<div id="TR1_Mode">
    <input type="radio" id="TR1_Mode_Dif" name="TR1_Mode_radio" value="Mode_Dif" ><label for="TR1_Mode_Dif">Differentiation</label>
    <input type="radio" id="TR1_Mode_Int" name="TR1_Mode_radio" value="Mode_Int" checked="checked"><label for="TR1_Mode_Int">Integration</label>
</div>

Изменение "проверенных" состояний программным путем с помощью следующего кода (попробуйте в консоли):

$('[name="TR1_Mode_radio"][value="Mode_Dif"]').attr("checked", false);
$('[name="TR1_Mode_radio"][value="Mode_Int"]').attr("checked", true);
$('#TR1_Mode').buttonset("refresh");

Это может сработать, но после того, как сделать то же самое в обратном порядке:

$('[name="TR1_Mode_radio"][value="Mode_Dif"]').attr("checked", true);
$('[name="TR1_Mode_radio"][value="Mode_Int"]').attr("checked", false);
$('#TR1_Mode').buttonset("refresh");

Выбранная кнопка будет снята, но флажок не будет проверен. Я что-то упустил или это неправильное поведение в jquery?

Кнопки, похоже, ведут себя хорошо, но они не выполняют ту же цель.

Я исправляю это с помощью Chrome (32.0.1700.107 m) и Firefox (27.0.1) и тестировал его с помощью последних версий JQuery: jquery-2.0.3.js и jquery-1.10.2.js

  • 0
    попробуйте $ ('[name = "TR1_Mode_radio"] [value = "Mode_Int"]'). removeAttr ("флажок") вместо attr ("флажок", false)
Теги:
refresh
radio

1 ответ

0
Лучший ответ

Существует разница между $.prop и $.attr. В частности, attr эквивалентен перезаписи html, в то время как prop фактически изменяет значение объекта DOM. Таким образом, это сработает:

$('[name="TR1_Mode_radio"][value="Mode_Dif"]').prop("checked", true);
$('[name="TR1_Mode_radio"][value="Mode_Int"]').prop("checked", false);

или это сработает

$('[name="TR1_Mode_radio"][value="Mode_Dif"]').attr('checked', 'checked');
$('[name="TR1_Mode_radio"][value="Mode_Int"]').removeAttr('checked');

Примеры, которые вы найдете в Интернете, могут сбивать с толку, потому что более старые версии jQuery (<1.6) имели только один метод attr который будет вести себя несколько непоследовательно между этими двумя поведениями.

За что его стоит, я лично считаю, prop приводит к более выразительный и понятный коду.

  • 0
    Отлично, Мэтт! Большое спасибо, это работает очень хорошо (только что попробовал "prop", так как мне больше нравится этот стиль). Я скучаю по документации о таких вещах - как получить значения из элементов управления, а также установить их заново. Обычно я ожидаю, что это можно найти в API элемента управления, но они очень тонкие в этом отношении. Есть ли у вас какие-либо советы для меня относительно такого рода информации? Большое спасибо :-) и недурно!
  • 0
    Иногда полезно учиться на таких курсах, как codeacademy.com. Если этот ответ вас устраивает, примите его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню