Показать сообщение отдельно
  #5 (permalink)  
Старый 05.04.2012, 11:03
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Невнимательно прочитал, извиняюсь. Получилось громоздко, но нет уже ни времени ни желания оптимизировать:
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;
  }
}

Вы назначаете группам классы. Создаёте экземпляр моего класса и передаёте ему класснеймы фиелдсетов, выбор радиокнопок в которых должен исключать друг друга. Пристрелите меня, но проще не скажу. Можно передавать не две группы, а сколько угодно. В качестве бонуса, будут учитываться динамически добавленные радиокнопки.

Для понимания проще, наверное, посмотреть пример.
Пример с тремя группами.

Последний раз редактировалось GuardCat, 05.04.2012 в 11:17.
Ответить с цитированием