Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Появление формы при выборе пункта выпадающего списка (https://javascript.ru/forum/dom-window/63908-poyavlenie-formy-pri-vybore-punkta-vypadayushhego-spiska.html)

MadMaxZZZ 08.07.2016 07:13

Цитата:

Сообщение от laimas (Сообщение 421551)
<option value="5">Приказ</option>
<option value="6">Распоряжение</option>

это же не я придумал.

Логика данного скрипта разве не такая:
при выборе "Бухгалтерского документа" показывать див с id=Block1
function Selected(a) {
        var label = a.value;
        if (label==1) {
            document.getElementById("Block1").style.display='block';
            document.getElementById("Block2").style.display='none';
			document.getElementById("Block3").style.display='none';
			document.getElementById("Block4").style.display='none';
			document.getElementById("Block5").style.display='none';
        }
Иначе не показывать ничего.
Пользователь будет выбирать, какой документ внести, далее выбирает тип документа (из выпадающего списка) и после выбора появляется необходимая форма, допустим div id=Block5 (форма). Я пробовал присвоить id элементу списка options, но скрипт к нему не обращается..

warren buffet 08.07.2016 14:40

Цитата:

при выборе "Бухгалтерского документа" показывать див с id=Block1
И где тут логика? Никакого отношения Block1 к бухгалтерии не имеет, это чистая абстракция, связывать которую придется прямо в хтмле. Советую не мучиться, а отдать это все сделать знающим людям.

MadMaxZZZ 08.07.2016 14:43

Цитата:

Сообщение от warren buffet (Сообщение 421602)
И где тут логика? Никакого отношения Block1 к бухгалтерии не имеет, это чистая абстракция, связывать которую придется прямо в хтмле. Советую не мучиться, а отдать это все сделать знающим людям.

Что значит нет логики? При выборе "бухгалтерский документ" (label==1) вываливается div Block1 с пунктами ...все же в скрипте написано.

MadMaxZZZ 08.07.2016 14:44

Цитата:

Сообщение от warren buffet (Сообщение 421602)
Советую не мучиться, а отдать это все сделать знающим людям.

Видимо придется так и сделать, раз тут таких нет.

warren buffet 08.07.2016 15:18

Логика это когда есть консеквент и антецедент, если бухгалтер, то бухгалтерские документы, а в выражении если бухгалтер, то Block1 никакой логики нет вообще. Это можно как угодно в скрипте связать, а эти связи НЕ образуют никакой логики, то есть ее не существует на странице.

warren buffet 08.07.2016 15:25

Цитата:

Сообщение от MadMaxZZZ (Сообщение 421604)
Видимо придется так и сделать, раз тут таких нет.

Ага, щаз все сбежались чинить чудовищный хтмл для халявщика. )))

Надо нарисовать модели, то есть дерево связей. Когда есть связи определенные моделью, вот тогда и появляется логика.

Бухгатерские документы
+ Половой акт
+ Авансовый отчет
+ Налоговая декларация

В машинно-читаемом виде пользуются xml или наша братия - json. Например

var docs={
  buh:{
      title: Бухгатерские документы
      tip: Выберите тип документа
      options:{
         a:Половой акт,
         b:Авансовый отчет,
         c:Налоговая декларация
       },
   },
   any{
    /* по той же схеме */
   }

};


Теперь имея такую даже самую скромную модель, можно отрендерить по ней какие угодно интерфейсы в которых заложенная в модель "логика" сохранится железобетонно.

laimas 08.07.2016 15:27

MadMaxZZZ,
чтобы не писать лишнего в коде, то есть "если равно 1, то 1 показать, 2 - 5 скрыть, если равно 2, то показать 2, срыть 1, 3-5, и т.д." можно и нужно в таком случае использовать код мной показанный - имя блока = постоянное значение + значение опции. Но по вашему примеру первый содержит 7 опций, последняя со значением 6, а блоков "открываемых" всего 5.

Я эту опции убрал из списка, ибо я понятия не имею какая там у вас логика заложена в скрипт. Было заявлено, что выбор этих списков определяет "свою" форму, но тогда вопрос - где формы? Если конечные списки также определяют форму, то почему "как вывести Block5 при выборе, допустим "Акт" или "Выполнение работ"", каким образом в блоке 5 появится для каждого выбора своя форма?

Если "Акт" или "Выполнение работ" также форму также в блоке 5, то связать нужно и их опции с блоком 5. Это можно сделать. Но если и все остальные опции конечных списков открывают форму в последнем блоке, а у каждого она своя, где-то и как-то определенная, а значения "а, b, c" с ними связано, значит нужен общий обработчик для этих списков, который и выбирает и показывает форму в блоке 5, и последнее не требует при этом никаких if.

warren buffet 08.07.2016 15:35

Потому что можно дальше продолжать:

var docs={
  buh:{
      title: Бухгатерские документы
      tip: Выберите тип документа
      options:{
         a:form{
              title:Половой акт,
              fields:{
                  name:Введите
                  occu: выведите
                  loca: заведите
              },
         /* по той же схеме */
         b:Авансовый отчет,
         c:Налоговая декларация
       },
   },
   any{
    /* по той же схеме */
   }

};


И когда хотя бы одна форма нормально описана, структура тупо вопроизводится копипастой и правкой для всех остальных самоподобных структур.

Когда скриптопизец начинает кодить с рендера, с хтмля, он заведомо себя обрекает на вечный кактус в заднице. Потому что простота и легкость вначале, гарантирует сложность и тягость даже не в конце, а чуть дальше начала. Зато кажущиеся сложными и трудными методы в начале, освобождают рабочих и крестьян для досуга.

MadMaxZZZ 08.07.2016 15:37

Цитата:

Сообщение от laimas (Сообщение 421612)
MadMaxZZZ,
чтобы не писать лишнего в коде, то есть "если равно 1, то 1 показать, 2 - 5 скрыть, если равно 2, то показать 2, срыть 1, 3-5, и т.д." можно и нужно в таком случае использовать код мной показанный - имя блока = постоянное значение + значение опции. Но по вашему примеру первый содержит 7 опций, последняя со значением 6, а блоков "открываемых" всего 5.

Я эту опции убрал из списка, ибо я понятия не имею какая там у вас логика заложена в скрипт. Было заявлено, что выбор этих списков определяет "свою" форму, но тогда вопрос - где формы? Если конечные списки также определяют форму, то почему "как вывести Block5 при выборе, допустим "Акт" или "Выполнение работ"", каким образом в блоке 5 появится для каждого выбора своя форма?

Если "Акт" или "Выполнение работ" также форму также в блоке 5, то связать нужно и их опции с блоком 5. Это можно сделать. Но если и все остальные опции конечных списков открывают форму в последнем блоке, а у каждого она своя, где-то и как-то определенная, а значения "а, b, c" с ними связано, значит нужен общий обработчик для этих списков, который и выбирает и показывает форму в блоке 5, и последнее не требует при этом никаких if.

Мы с Вами, я так думаю, вообще о разных вещах говорим...

warren buffet 08.07.2016 15:40

Цитата:

"если равно 1, то 1 показать, 2 - 5 скрыть, если равно 2, то показать 2, срыть 1, 3-5, и т.д."
Это блин и называется табличный метод, ибо никакой связи между 1 и 2 и 5 и 387 и 96545 и 100500 - нету. Просто мы ставим слева число и справа число и заявляем что так надо. Это называется еще раз - табличный метод, когда вычислять нечего или невозможно вычислить и найти функции и логику и отношения.

Тогда отношения заводятся искусственно, но они именно заводятся ВИЗУАЛЬНО, то есть материально, ощутимо, оценимо в какой-то нормализованной форме, которая отождествляет именно данные, а не их какое-то там представление.

Имея нормальные модели можно рендерить эти дебильные списки и формы как угодно. А когда оно тупо завязано в хмтле и скриптах - это сразу кактус четыре раза в жопу.


Часовой пояс GMT +3, время: 22:51.