В моем проекте я использую следующий набор кнопок 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
Существует разница между $.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
приводит к более выразительный и понятный коду.