Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.03.2013, 01:51
Интересующийся
Отправить личное сообщение для jorik Посмотреть профиль Найти все сообщения от jorik
 
Регистрация: 04.06.2012
Сообщений: 24

Управление формами
Привествую javascript гуру
Пишу несколько не простую форму регистрации для своего сайта, сам пишу на php, но вот для части формы необходимо сделать несколько "фич", которые под силу только javascript (так чтоб без изврата). Суть такова:
<html> 
<head> 
  <title></title> 
</head> 
<body> 
<form name='form' action='' method='post'> 
<pre> 
	  Не заполнять <input type='checkbox' name='sel_all'> 
		Вариант 1 <input id='items_1' type='checkbox'>  <input type='text'>
		Вариант 2 <input id='items_2' type='checkbox'>  <input type='text'>
		Вариант 3 <input id='items_3' type='checkbox'>  <input type='text'>
		Тоже не заполнять <input type='checkbox' name='sel_all'>
			Вариант 1.1 <input id='items_1' type='checkbox'>  <input type='text'>
			Вариант 2.1 <input id='items_2' type='checkbox'>  <input type='text'>
			Вариант 3.1 <input id='items_3' type='checkbox'>  <input type='text'>
</pre> 
</form> 
</body> 
</html>

Когда стоит галочка "Не заполнять", все остальные чекбоксы должны быть отмечены + все поля заблокированы для ввода+все, что ниже этого чебокса спрятано, вроде как так
function collapsElement(id) {
    if ( document.getElementById(id).style.display != "none" ) {
        document.getElementById(id).style.display = 'none';
    }
    else {
        document.getElementById(id).style.display = '';
    }
}

Для поля "Тоже не заполнять" все тоже самое, но действовать должно только на элементы, которые ниже него. Таких блоков на странице будет несколько и они должны быть независимы.
Нашел множество способов как можно это реализовать по отдельности (блокировка поле, выбрать все чекбоксы итд.) и вроде понятно как это работает, но все это в кучу склеить не выходит. Очень надеюсь на Вашу помощь т.к. с javascript у меня беда.

Последний раз редактировалось jorik, 03.03.2013 в 02:18.
Ответить с цитированием
  #2 (permalink)  
Старый 03.03.2013, 04:02
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

<script>
    function toggleGroup(groupId, hide) {
       var group = document.getElementById(groupId);
       group.style.display = hide ? 'none' : 'block';
    }
</script>
<label>Не заполнять <input type='checkbox' name='sel_all' onchange="toggleGroup('extra1', checked)"></label>
<fieldset id="extra1">
    Вариант 1 <input id='items_1' type='checkbox'>  <input type='text'>
    Вариант 2 <input id='items_2' type='checkbox'>  <input type='text'>
    Вариант 3 <input id='items_3' type='checkbox'>  <input type='text'>
</fieldset>
<label>Тоже не заполнять <input type='checkbox' name='sel_all' onchange="toggleGroup('extra2', checked)"></label>
<fieldset id="extra2">
    Вариант 1.1 <input id='items_1' type='checkbox'>  <input type='text'>
    Вариант 2.1 <input id='items_2' type='checkbox'>  <input type='text'>
    Вариант 3.1 <input id='items_3' type='checkbox'>  <input type='text'>
</fieldset>
Ответить с цитированием
  #3 (permalink)  
Старый 03.03.2013, 04:20
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

jorik,
Ну в принципе на странице много форм удобно пользовать jQuery
<html> 
<head> 
 <title>
</title> 
<script src="http://code.jquery.com/jquery-latest.js"></script>

</head> 
<body> 
<form id='formNN' name='form' action='' method='post'> 
<pre> 
	  <span class='tree all'>Не заполнять <input type='checkbox' name='sel_all'></span>
		<span class='tree'>Вариант 1 <input id='items_1' type='checkbox'>  <input type='text'></span>
		<span class='tree'>Вариант 2 <input id='items_2' type='checkbox'>  <input type='text'></span>
		<span class='tree'>Вариант 3 <input id='items_3' type='checkbox'>  <input type='text'></span>
		<span class='tree all'>Тоже не заполнять <input type='checkbox' name='sel_all'></span>
			<span class='tree'>Вариант 1.1 <input id='items_1' type='checkbox'>  <input type='text'></span>
			<span class='tree'>Вариант 2.1 <input id='items_2' type='checkbox'>  <input type='text'></span>
			<span class='tree'>Вариант 3.1 <input id='items_3' type='checkbox'>  <input type='text'></span>
</pre> 
</form>
<script>
$(document).ready(function(){
  var form = $('#formNN');
  var treeChecks = $('pre span.tree',form);
  var length = treeChecks.length;

  $('pre span.tree.all input[type="checkbox"]',form) .change(function(){
       var sw = !this.checked;
       var ThInd = treeChecks.index($(this).parent()[0]);
       for(var i=ThInd+1;i<length; i++) {
            $(treeChecks[i]).toggle(sw);
       }
  });
});
</script>
</body> 
</html>

Cобственно плагин не доведен, поскольку не понятно, что с чекитами , которые не name='sel_all',
Они участвуют в этой постановке ?

Последний раз редактировалось Deff, 03.03.2013 в 04:27.
Ответить с цитированием
  #4 (permalink)  
Старый 03.03.2013, 04:29
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ну да. Кому-то достаточно 4 строчки кода, что составит 150 байт (в несжатом виде) чтобы решить эту задачу, а кому-то нужно 10000 строк кода что составляет 90 килобайт + еще 12 строк кода.
Ответить с цитированием
  #5 (permalink)  
Старый 03.03.2013, 04:34
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

danik.js,
Знаем мы эти две строчки на реальной задаче, могу спорить, что твой Вариант не подойдёт...Было уже на днях с подобной задачей...
Потом чел уточнил - что каждый чекбокс 1 = должен скрывать подгруппу 1.1
Ответить с цитированием
  #6 (permalink)  
Старый 03.03.2013, 04:44
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ну хорошо, плюс еще одна строчка для подключения костыля для старых ишаков, эмуляция querySelector. Согласись это ничто по сравнению с 10000 строк кода jQuery
Ответить с цитированием
  #7 (permalink)  
Старый 03.03.2013, 04:46
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сейчас мозг у всех превратился в плагин для jQuery. Все "мастерски" владеют jQuery, и даже не подозревают как сделать тоже самое, но без подключения лишних 10000 строк кода.
Ответить с цитированием
  #8 (permalink)  
Старый 03.03.2013, 04:48
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Вобще, если сайт делается на заказ и за копейки, то jQuery тут - самое оно. Не нужно себя утруждать ничем. Если же сайт для себя - я бы постарался сделать его максимально качественным, и врядли бы подключал jQuery всего лишь ради скрытия полей формы.
Ответить с цитированием
  #9 (permalink)  
Старый 03.03.2013, 04:49
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

danik.js,
Во первых схема неверна - первый чек - отключает - обе строки
Во вторых - я решаю задачи которые имеют интерес и для меня, у меня на сервисе jquery подключена на всех страницах,
А на сколько это решение устроит ТС - ему решать
Ответить с цитированием
  #10 (permalink)  
Старый 03.03.2013, 05:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Deff
ThInd
Сообщение от Deff
sw
Сообщение от Deff
formNN
Ты подрабатыавешь обфускатором? Ну ладно свой код запутывать, но ведь автор вопроса не разберется в этих всяких sw или ThInd'ах ...
Неужели нельзя дать нормальные понятные имена, а не шифровать. Ты бы еще так писал:

var a = $('#formNN');
var b = $('pre span.tree',a);
var c = b.length;

$('pre span.tree.all input[type="checkbox"]',a) .change(function(){
   var d = !this.checked;
   var e = b.index($(this).parent()[0]);
   for(var i=e+1;i<c; i++) {
        $(b[i]).toggle(d);
   }
});
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое управление картами Resager Общие вопросы Javascript 0 27.09.2012 05:27
Управление таблицей Rik Events/DOM/Window 28 08.06.2012 23:51
Анимация и управление строчкой текста INI jQuery 2 31.08.2010 08:22
управление accordion menu SuperPuperLesha Общие вопросы Javascript 5 29.08.2009 13:11
передача данных между формами Yurii Общие вопросы Javascript 2 30.04.2008 20:52