Невнимательно прочитал, извиняюсь. Получилось громоздко, но нет уже ни времени ни желания оптимизировать:
function RadioController() {
var
x, queryString, r,
fieldsets = document.querySelectorAll("." + Array.prototype.join.call(arguments, ", ."))
;
for(x = 0; x < fieldsets.length; x++) {
queryString = "";
for(y = 0; y < arguments.length; y++) {
if (fieldsets[x].className === arguments[y]) continue;
if (queryString.indexOf(arguments[y]) != -1) continue;
queryString += " ." + arguments[y] + " input[type=radio], "
}
queryString = queryString.replace(/, $/, "");
fieldsets[x].setAttribute("data-classes", queryString);
fieldsets[x].onclick = RadioController.uncheckAnother;
}
}
RadioController.uncheckAnother = function(e) {
var target, x, radios;
e = e || window.event;
target = e.target || e.srcElement;
if (target.type !== "radio") return false;
radios = document.querySelectorAll(this.getAttribute("data-classes"));
for(x = 0; x < radios.length; x++) {
radios[x].checked = false;
}
}
Вы назначаете группам классы. Создаёте экземпляр моего класса и передаёте ему класснеймы фиелдсетов, выбор радиокнопок в которых должен исключать друг друга. Пристрелите меня, но проще не скажу. Можно передавать не две группы, а сколько угодно. В качестве бонуса, будут учитываться динамически добавленные радиокнопки.
Для понимания проще, наверное, посмотреть
пример.
Пример с тремя группами.