Перейти к содержимому


Показ/скрытие полей через JavaScript


Сообщений в теме: 319

#81 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 434 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 15 Май 2013 - 11:19

Я так полагаю, если поля не пересекающиеся, то их проще разделить на группы и открывать и закрывать группы

#82 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 434 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 15 Май 2013 - 11:21

Функция display_fgroup, работает полностью аналогично display_field. Также группа скрывается автоматом если нет доступа ни к одному полю в группе.

#83 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 19 Июнь 2013 - 13:18

Подскажите, может что не так сделала.
Из списка можно выбрать "Авто" и "Мото", к примеру. Выбираю "Авто"-получаю Прикрепленное изображение: Авто.png
После этого в основном списке выбираю "Мото" сразу же, в итоге строка от "Авто" никуда не делась..Прикрепленное изображение: автоИмото.png

Что и где нужно прописать?)))

#84 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 688 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Июнь 2013 - 13:24

Очевидно, что включая отображение мото-блока, вы не отключаете авто-блок. Сам по себе он не пропадет.

#85 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 19 Июнь 2013 - 13:29

Просмотр сообщенияCbCoder (19 Июнь 2013 - 13:24) писал:

Очевидно, что включая отображение мото-блока, вы не отключаете авто-блок. Сам по себе он не пропадет.

Смотрите, получается даже если я из списка убираю "Авто", то поле все равно остается внизу Прикрепленное изображение: авто2.png
Что-то в коде нужно дописать для этого?...

Дописываю-поле пропало. Последовательность действий-у меня есть поле для выбора, выбираю "Авто", появляется еще одно поле со списком, там тоже выбираю. Так вот текстовое поле, что на рисунке "мешается" пропадает только тогда, когда во всех полях со списком убираю выбранное действие. Получается, что это правильно?последовательное обнуление полей?

Сообщение отредактировал Dinara: 19 Июнь 2013 - 13:32


#86 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 688 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Июнь 2013 - 13:37

Не понял, честно говоря, зачем вы убирали "Авто" из списка, у меня речь шла совсем о другом.

Какой у вас должен быть алгоритм js-кода:

1. Если выбранное значение "авто" - показываем авто-блок и убираем мото-блок
2. Если выбранное значение "мото" - показываем мото-блок и убираем авто-блок

У вас же, как я уже выше сказал, видимо прописано только отображение блоков, без их отключения.

Если все равно непонятно что я написал, выложите здесь свой код.

#87 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 19 Июнь 2013 - 13:42

Просмотр сообщенияCbCoder (19 Июнь 2013 - 13:37) писал:

Не понял, честно говоря, зачем вы убирали "Авто" из списка, у меня речь шла совсем о другом.

Какой у вас должен быть алгоритм js-кода:

1. Если выбранное значение "авто" - показываем авто-блок и убираем мото-блок
2. Если выбранное значение "мото" - показываем мото-блок и убираем авто-блок

У вас же, как я уже выше сказал, видимо прописано только отображение блоков, без их отключения.

Если все равно непонятно что я написал, выложите здесь свой код.


Код брала отсюда,в начале форума был предоставлен:
function onchange_{$one_field.id}()
{
display_field(3541, document.getElementById('value{$one_field.id}').value=="катер");
display_field(3551, document.getElementById('value{$one_field.id}').value=="авто");
display_field(3561, document.getElementById('value{$one_field.id}').value=="мото");
display_field(3571, document.getElementById('value{$one_field.id}').value=="мото");
display_field(3581, document.getElementById('value{$one_field.id}').value=="мото");

// id1 и id2 - id тех полей, которые необходимо скрыть/отобразить, вместо них подставляете нужные вам номера
}
addHandler(document.getElementById('value{$one_field.id}'), 'onchange', onchange_{$one_field.id});

Это в основном поле выбора, которое показывается при открытии таблицы

#88 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 688 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 19 Июнь 2013 - 13:47

Приведенный код должен автоматически включать/отключать видимость полей в зависимости от выполнения условий. Странно что он у вас не работает. Пришлите заявку в техподдержку с бэкапом для проверки.

#89 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 688 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 24 Июнь 2013 - 14:25

Посмотрел присланную вами конфигурацию. Как я уже писал, вы не все поля скрываете в js коде при выборе другого значения, просто из предоставленного здесь вами кода это было не сразу ясно. Т.е. у вас в коде есть скрытие/отображение основных полей, но нет скрытия дополнительных, которые открываются после выбора вторичных списков. Код должен быть таким:

function onchange_{$one_field.id}()
{
	display_field(3541, document.getElementById('value{$one_field.id}').value=="катер");
	display_field(3551, document.getElementById('value{$one_field.id}').value=="авто");
	display_field(3561, document.getElementById('value{$one_field.id}').value=="мото");
	display_field(3571, document.getElementById('value{$one_field.id}').value=="мото");
	display_field(3581, document.getElementById('value{$one_field.id}').value=="мото");

	if (document.getElementById('value{$one_field.id}').value!="авто")
	{ // если выбор не равен "авто", отключаем доп.поля для авто:
		display_field(3611, 0);
	}

	if (document.getElementById('value{$one_field.id}').value!="мото")
	{ // если выбор не равен "мото", отключаем доп.поля для мото:
		display_field(3591, 0);
		display_field(3601, 0);
	}
}
addHandler(document.getElementById('value{$one_field.id}'), 'onchange', onchange_{$one_field.id});


#90 Dinara

    Активный участник

  • Пользователи
  • PipPipPip
  • 527 сообщений
  • Пол:Женщина
  • Город:Уфа

Отправлено 25 Июнь 2013 - 06:07

Просмотр сообщенияCbCoder (24 Июнь 2013 - 14:25) писал:

Посмотрел присланную вами конфигурацию. Как я уже писал, вы не все поля скрываете в js коде при выборе другого значения, просто из предоставленного здесь вами кода это было не сразу ясно. Т.е. у вас в коде есть скрытие/отображение основных полей, но нет скрытия дополнительных, которые открываются после выбора вторичных списков. Код должен быть таким:

function onchange_{$one_field.id}()
{
	display_field(3541, document.getElementById('value{$one_field.id}').value=="катер");
	display_field(3551, document.getElementById('value{$one_field.id}').value=="авто");
	display_field(3561, document.getElementById('value{$one_field.id}').value=="мото");
	display_field(3571, document.getElementById('value{$one_field.id}').value=="мото");
	display_field(3581, document.getElementById('value{$one_field.id}').value=="мото");

	if (document.getElementById('value{$one_field.id}').value!="авто")
	{ // если выбор не равен "авто", отключаем доп.поля для авто:
		display_field(3611, 0);
	}

	if (document.getElementById('value{$one_field.id}').value!="мото")
	{ // если выбор не равен "мото", отключаем доп.поля для мото:
		display_field(3591, 0);
		display_field(3601, 0);
	}
}
addHandler(document.getElementById('value{$one_field.id}'), 'onchange', onchange_{$one_field.id});

ух ты, вот оно как делается))спасибо,записала себе,разобралась!!)))

#91 OLDest

    Активный участник

  • Пользователи
  • PipPipPip
  • 265 сообщений
  • Пол:Мужчина

Отправлено 12 Август 2013 - 18:49

Вопрос такой, есть 2 поля обязательных к заполнению, Раньше когда я их скрывал он не требовал их заполнять, теперь же требует. В условии написано показывать только при изменении полей, а он требует всегда
var statusValue = document.getElementById('value1371').value;
var numValue = document.getElementById('value1271').value;
var datregValue = document.getElementById('value1281').value;
var datbornValue = document.getElementById('value1461').value;
var douValue = document.getElementById('value1761').value;
var editOsn = document.getElementById('value1381').value;
var editKom = document.getElementById('value1391').value;
var LgotaValue = document.getElementById('value2431').value;
var FamValue = document.getElementById('value1421').value;
/*Изменение статуса*/
function onchange_{1371}()
{
display_fgroup(11, (document.getElementById('value1371').value!=statusValue)&(FamValue!=''));
if(document.getElementById('value1371').value!=statusValue)
  {
  if (document.getElementById('value1391').value==' ')
   {
	document.getElementById('value1391').value='';
	document.getElementById('value1381').value='';
   }
  if (document.getElementById('value1381').value==editOsn)
   {
   if (document.getElementById('value1391').value==editKom)
	{
	 document.getElementById('value1391').value='';
	 document.getElementById('value1381').value='';
	}
   }
  }
else
{
document.getElementById('value1381').value=editOsn;
document.getElementById('value1391').value=editKom;
}
}
$('#value{1371}').bind('change', onchange_{1371});
addHandler(document.getElementById("value1371"), "onchange", onchange_{1371});
/*Изменение номера регистрации*/
function onchange_{1271}()
{
display_fgroup(11, (document.getElementById('value1271').value!=numValue)&(FamValue!=''));
if(document.getElementById('value1271').value!=numValue)
  {
  if (document.getElementById('value1391').value==' ')
   {
	document.getElementById('value1391').value='';
	document.getElementById('value1381').value='';
   }
  if (document.getElementById('value1381').value==editOsn)
   {
   if (document.getElementById('value1391').value==editKom)
	{
	 document.getElementById('value1391').value='';
	 document.getElementById('value1381').value='';
	}
   }
  }
else
{
document.getElementById('value1381').value=editOsn;
document.getElementById('value1391').value=editKom;
}
}
$('#value{1271}').bind('change', onchange_{1271});
addHandler(document.getElementById("value1271"), "onchange", onchange_{1271});
$(document).ready(function() {
  onchange_{1371}();
  onchange_{1271}();
});

Сообщение отредактировал OLDest: 12 Август 2013 - 18:51

Купил лицензию КБ

#92 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 688 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 13 Август 2013 - 09:58

Вопрос то в чем, конкретно?

#93 OLDest

    Активный участник

  • Пользователи
  • PipPipPip
  • 265 сообщений
  • Пол:Мужчина

Отправлено 13 Август 2013 - 16:38

Вопрос - Раньше когда я их скрывал он не требовал их заполнять, теперь же требует. Поля скрыты.
Купил лицензию КБ

#94 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 688 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 13 Август 2013 - 16:52

Насколько я знаю, раньше такого никогда не было, да и не могло быть, т.к. функция проверки заполненности полей не проверяет и не проверяла никогда, скрыто поле или нет. Возможно вы путаете со скрытием поля через группу доступа.

#95 OLDest

    Активный участник

  • Пользователи
  • PipPipPip
  • 265 сообщений
  • Пол:Мужчина

Отправлено 13 Август 2013 - 17:27

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

#96 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 688 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 13 Август 2013 - 17:35

Если там что-то и было подобное - то возможно это был скрытый баг, т.к. ничего и никогда специально на эту тему не делалось. Еще раз повторюсь - функция проверки заполненности полей не проверяет скрытие элемента. Яваскрипту это без разницы (если специально условие не прописать) - свойство "value" элемента не зависит от его стилей.

#97 goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 193 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 16 Август 2013 - 10:22

К полю типа список у меня прописан следующий код:
function on_change_{$one_field.id}()
{
  display_field(4861, document.getElementById('value4161').value!='Пигменты');
  display_field(4861, document.getElementById('value4161').value!='Краски');
  
  display_field(5751, document.getElementById('value4161').value!='Светодиоды');
 
  display_field(4921, document.getElementById('value4161').value=='Пигменты');
 
  display_field(5761, document.getElementById('value4161').value=='Пигменты');
  display_field(5761, document.getElementById('value4161').value=='Панели');
  display_field(5761, document.getElementById('value4161').value=='Ленты');
  display_field(5761, document.getElementById('value4161').value=='Блоки питания');
  display_field(5761, document.getElementById('value4161').value=='Светодиоды');
 
  display_field(5771, document.getElementById('value4161').value=='Плёнки');
 
  display_field(5781, document.getElementById('value4161').value=='Провода');
  display_field(5781, document.getElementById('value4161').value=='Камни');
  display_field(5781, document.getElementById('value4161').value=='Плитка');
 
  display_field(5791, document.getElementById('value4161').value=='Блоки питания');
 
  display_field(5801, document.getElementById('value4161').value=='Блоки питания');
 
  display_fgroup(221, document.getElementById('value4161').value!='');
 
}
addHandler(document.getElementById('value4161'), 'onchange', on_change_{$one_field.id});
$().ready(function() {
  on_change_{$one_field.id}();
});

К полям прописан везде одинаковый код:
display_field({$one_field.id}, document.getElementById('value4161').value!="");

Не получается таким образом спрятать поле 4861 и показать поле 5761 при выборе из списка значения "Пигменты".
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#98 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 688 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 16 Август 2013 - 11:22

Потому что вы неправильно задаете условия показа/скрытия.

К примеру, здесь:

  display_field(5781, document.getElementById('value4161').value=='Камни');
  display_field(5781, document.getElementById('value4161').value=='Плитка');

сработает только последняя команда, т.е. покажет 5781 только если поле 4161 равно плитке. Все остальное проигнорируется. Т.к. все условия для одного поля нужно задавать одновременно.

Например:

display_field(5781, document.getElementById('value4161').value=='Камни' || document.getElementById('value4161').value=='Плитка');
или
if (document.getElementById('value4161').value=='Камни' || document.getElementById('value4161').value=='Плитка') display_field(5781, 1);


#99 goodcolor

    Активный участник

  • Пользователи
  • PipPipPip
  • 193 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 16 Август 2013 - 13:27

Так тоже делал.
Например для поля 4861:
display_field(4861, document.getElementById('value4161').value!='Пигменты' || document.getElementById('value4161').value!='Краски');
В самом поле прописано:
display_field({$one_field.id}, document.getElementById('value4161').value!="");
Вроде как при выборе "Пигменты" и "Краски" поля должны скрываться, а они показываются. Что-то не так?
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#100 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 688 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 16 Август 2013 - 13:44

Условия "не равно" по одному тому же полю должны разделяться оператором "и" (&&):

display_field(4861, document.getElementById('value4161').value!='Пигменты' && document.getElementById('value4161').value!='Краски');

"не равно Пигменты И не равно Краски"

Тогда как у вас стоит "или" - такое условие будет показывать поле всегда.





Количество пользователей, читающих эту тему: 11

0 пользователей, 11 гостей, 0 анонимных