Переключатели работают правильно ( proof ), но ваша логика обновления изображений неверна. Оба изображения должны измениться при нажатии любой из переключателей, поскольку оба значения изменяются (и обработчик change
запускается только на том, который вы щелкнули). Имейте один обработчик change
, используемый обеими радиокнопками, и устанавливайте оба изображения при каждом изменении, например ::
$('#radio1, #radio2').change(function() {
var r;
r = $("#radio1");
r.prev().attr("src", r[0].checked ? checkedImage : uncheckedImage);
r = $("#radio2");
r.prev().attr("src", r[0].checked ? checkedImage : uncheckedImage);
});
Живой пример
Примечание: если ваши целевые браузеры поддерживают псевдокласс :checked
(IE имеет это только в IE9, а не в IE8 или более ранних версиях) и соседний комбинатор братьев и сестер из CSS3, вы можете сделать это полностью с помощью CSS:
HTML:
<input type="radio" name="radiogroup" id="radio1" style="display: none">
<label for="radio1"></label>
<input type="radio" name="radiogroup" id="radio2" style="display: none">
<label for="radio2"></label>
CSS:
#radio1 + label, #radio2 + label {
display: inline-block;
background-image: url(radio_unchecked.png);
width: 32px; /* Whatever matches the images */
height: 32px; /* Whatever matches the images */
}
#radio1:checked + label, #radio2:checked + label {
background-image: url(radio_checked.png);
}
Живой пример
Или поочередно (различаются только селекторы):
input[name="radiogroup"] + label {
display: inline-block;
background-image: url(radio_unchecked.png);
width: 32px; /* Whatever matches the images */
height: 32px; /* Whatever matches the images */
}
input[name="radiogroup"]:checked + label {
background-image: url(radio_checked.png);
}