Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2009, 14:37
Новичок на форуме
Отправить личное сообщение для Mamba Посмотреть профиль Найти все сообщения от Mamba
 
Регистрация: 23.08.2009
Сообщений: 6

Управление массивами чекбоксов, Необходимо отключить чекбоксы в контексте группы
Существует динамический формируемый массив чекбоксов, например:

<input id="1" name="1" type="checkbox">
   <input id="1_1" name="1_1" type="checkbox">
   <input id="1_2" name="1_2" type="checkbox">
   <input id="1_3" name="1_3" type="checkbox">
   <input id="1_4" name="1_4" type="checkbox">
   <input id="1_5" name="1_5" type="checkbox">
   <input id="1_6" name="1_6" type="checkbox">

<input id="2" name="2" type="checkbox">
   <input id="2_1" name="2_1" type="checkbox">
   <input id="2_2" name="2_2" type="checkbox">
   <input id="2_3" name="2_3" type="checkbox">


<input id="3" name="3" type="checkbox">
   <input id="3_1" name="3_1" type="checkbox">
   <input id="3_2" name="3_2" type="checkbox">
   <input id="3_3" name="3_3" type="checkbox">
   <input id="3_4" name="3_4" type="checkbox">
   <input id="3_5" name="3_5" type="checkbox">

Необходимо при выборе любого чекбокса в одной группе все остальные группы отключить (disabled=true).
При этом колличество активных груп и тех которые должны отключаться тоже в перспективе должно масштабироваться.

Подскажите как их перебрать таким образом?
Спасибо!

Последний раз редактировалось Octane, 23.08.2009 в 16:27. Причина: используйте теги [html] и [js] для оформления кода
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2009, 16:29
Профессор
Отправить личное сообщение для alexKniaz Посмотреть профиль Найти все сообщения от alexKniaz
 
Регистрация: 14.10.2008
Сообщений: 186

<div id="checboxes">

<div id="ch_group1">
<input id="1" name="1" type="checkbox">
   <input id="1_1" name="1_1" onclick="chclick(this);" type="checkbox">
   <input id="1_2" name="1_2" onclick="chclick(this);" type="checkbox">
   <input id="1_3" name="1_3" onclick="chclick(this);" type="checkbox">
   <input id="1_4" name="1_4" onclick="chclick(this);" type="checkbox">
   <input id="1_5" name="1_5" onclick="chclick(this);" type="checkbox">
   <input id="1_6" name="1_6" onclick="chclick(this);" type="checkbox">
</div>

<div id="ch_group2">
   <input id="2" name="2"  onclick="chclick(this);" type="checkbox">
   <input id="2_1" name="2_1" onclick="chclick(this);" type="checkbox">
   <input id="2_2" name="2_2" onclick="chclick(this);" type="checkbox">
   <input id="2_3" name="2_3" onclick="chclick(this);" type="checkbox">
</div>

<div id="ch_group3">
<input id="3" name="3" onclick="chclick(this);" type="checkbox">
   <input id="3_1" name="3_1" onclick="chclick(this);" type="checkbox">
   <input id="3_2" name="3_2" onclick="chclick(this);" type="checkbox">
   <input id="3_3" name="3_3" onclick="chclick(this);" type="checkbox">
   <input id="3_4" name="3_4" onclick="chclick(this);" type="checkbox">
   <input id="3_5" name="3_5" onclick="chclick(this);" type="checkbox">
</div>

</div>


Вот скрипт:
function chclick(obj){
 var par=obj.parent;
 var p2=par.parent;
 for(i=1;i<p2.childNodes.length;i++){
  if(p2.childNodes.item(i).nodetype==1){
   if(p2.childNodes.item(i).id==par.id){
     p2.childNodes.item(i).disabled=false;
   }
   else{
     p2.childNodes.item(i).disabled=true;
   }
  }
 }
}
Ответить с цитированием
  #3 (permalink)  
Старый 23.08.2009, 23:14
Новичок на форуме
Отправить личное сообщение для Mamba Посмотреть профиль Найти все сообщения от Mamba
 
Регистрация: 23.08.2009
Сообщений: 6

Почемуто не работает пробовал сам перебрать но нехватаят знаний.

Проверочный алерт уже не работает после строки var p2=par.parent;
Ответить с цитированием
  #4 (permalink)  
Старый 24.08.2009, 00:04
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

parentNode, а не просто parent
Ответить с цитированием
  #5 (permalink)  
Старый 24.08.2009, 00:28
Новичок на форуме
Отправить личное сообщение для Mamba Посмотреть профиль Найти все сообщения от Mamba
 
Регистрация: 23.08.2009
Сообщений: 6

Спасибо большое! Продвинулся немного!



function chclick(obj)
{
var par=obj.parentNode;
var p2=par.parentNode;

for(i=1; i<p2.childNodes.length; i++)
{
alert(p2.childNodes.item(i).nodetype);
if(p2.childNodes.item(i).nodetype==1)
{
if(p2.childNodes.item(i).id==par.id)
{
p2.childNodes.item(i).disabled=false;
}
else
{
p2.childNodes.item(i).disabled=true;
}
}
}
alert(p2.childNodes.length);
}


Скрипт не заработал Проверяю - теперь alert(p2.childNodes.item(i).nodetype) выдает Undefined -- из чего я понимаю что чтото не так в обращении к child
Ответить с цитированием
  #6 (permalink)  
Старый 24.08.2009, 00:51
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Ну что же вы каждую опечатку будете на форуме постить, nodeType пишется, но там ошибка не в этом.

И вообще мне лень разбираться в чужом коде, в данном случае проще свой написать:
<div>
  <script type="text/javascript">
      function chclick(node) {
		  var group = node.parentNode;
		  var checkboxes = group.parentNode.getElementsByTagName("input");
		  var i = checkboxes.length;
		  while(i--) {
			  if(checkboxes[i].parentNode != group) {
				  checkboxes[i].disabled = true;
			  }
		  }
	  }
  </script>
  <div>
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
  </div>
  <div>
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
  </div>
  <div>
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
    <input onclick="chclick(this)" type="checkbox" />
  </div>
</div>

Последний раз редактировалось Octane, 24.08.2009 в 01:02.
Ответить с цитированием
  #7 (permalink)  
Старый 24.08.2009, 06:13
Новичок на форуме
Отправить личное сообщение для Mamba Посмотреть профиль Найти все сообщения от Mamba
 
Регистрация: 23.08.2009
Сообщений: 6

function chclick(node) 
	  {
		  var group = node.parentNode;
	      var checkboxes = group.parentNode.getElementsByTagName("input");
          var i = checkboxes.length;  
          var e = i;
		  var check = '';
		  while(i--) 
		  	{
             	if(checkboxes[i].checked == true)	
					{
					check = 'yes';
           			}		
          	}
	  	
		if (check == 'yes')	
		  	{
		    while(e--) 
		  		{
				if(checkboxes[e].parentNode != group) 
			  		{
                  	checkboxes[e].disabled = true;
              		}
          		}
			}
	  else
			{		
			while(e--) 
		  		{
              	checkboxes[e].disabled = false;
              	}	  
			}	  
	  
	  }


Добавил проверку чекнуты вооще ли какие чекбоксы и по ним отключение дисейбла...

Спасибо большое за помощь!

Последний раз редактировалось Mamba, 24.08.2009 в 21:40. Причина: используйте теги [html] и [js] для оформления кода
Ответить с цитированием
  #8 (permalink)  
Старый 24.08.2009, 16:50
Новичок на форуме
Отправить личное сообщение для Mamba Посмотреть профиль Найти все сообщения от Mamba
 
Регистрация: 23.08.2009
Сообщений: 6

Еще вопрос по ходу возник, как сделать, чтобы две группы (div) не отключались а все остальные дисейблились?
Ломаю голову и из того что есть не могу выкрутится
Ответить с цитированием
  #9 (permalink)  
Старый 24.08.2009, 16:52
Профессор
Отправить личное сообщение для alexKniaz Посмотреть профиль Найти все сообщения от alexKniaz
 
Регистрация: 14.10.2008
Сообщений: 186

Вытащить эти два дива за пределы группы. Самый простой вариант
Ответить с цитированием
  #10 (permalink)  
Старый 24.08.2009, 16:53
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
__________________
Лови позитив
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск