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


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


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

#221 serg63rus

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

  • Пользователи
  • PipPipPip
  • 52 сообщений

Отправлено 07 Май 2015 - 17:21

Просмотр сообщенияCbCoder (07 Май 2015 - 16:39) писал:

А чем опять вам правила не угодили? Любите вы сложные пути...
)))
Мне просто нужно при достижении определенного значения в записи основной таблицы закрывать доступ на добавление записей в подтаблицу. (грубо говоря есть счет, у него есть определенная сумма. При добавлении платежек (в подтаблице) на разные суммы - при достижении суммы счета нужно закрыть возможность дальнейшего добавления к данному счету платежек..

#222 serg63rus

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

  • Пользователи
  • PipPipPip
  • 52 сообщений

Отправлено 25 Май 2015 - 17:35

В общем очередные вопросы-проблемы:
Имеется подтаблица, которая скрывается при определенных значениях поля записи в основной таблице (через JS).

Так вот при доступе у пользователя на редактирование поля основной таблицы (при смене значения которого показывается или скрывается подтаблица) - все работает как надо. НО! При доступе у пользователя только на просмотр данного поля при выводе данное поле помещается в <span>, и скрипт не работает. Пробовал применить document.getElementById('view_cell_{$one_field.id}').innerHTML - толку ноль... Что в таких случаях делают?

#223 CbCoder

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

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

Отправлено 25 Май 2015 - 18:05

Да ничего не делают, JS просто не предназначен для таких случаев (когда поле не редактируется), по идее за это должны отвечать правила. Тут либо мы должны правила дорабатывать, либо вам придется пожертвовать безопасностью и открыть права на редактирование поля (затем можно скрыть его визуально через тот же JS).

#224 serg63rus

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

  • Пользователи
  • PipPipPip
  • 52 сообщений

Отправлено 25 Май 2015 - 18:12

Просмотр сообщенияCbCoder (25 Май 2015 - 18:05) писал:

Да ничего не делают, JS просто не предназначен для таких случаев (когда поле не редактируется), по идее за это должны отвечать правила. Тут либо мы должны правила дорабатывать, либо вам придется пожертвовать безопасностью и открыть права на редактирование поля (затем можно скрыть его визуально через тот же JS).
Вы имеете ввиду скрыть кнопку "Редактирования"?

#225 serg63rus

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

  • Пользователи
  • PipPipPip
  • 52 сообщений

Отправлено 26 Май 2015 - 06:36

Просмотр сообщенияCbCoder (25 Май 2015 - 18:05) писал:

Да ничего не делают, JS просто не предназначен для таких случаев (когда поле не редактируется), по идее за это должны отвечать правила. Тут либо мы должны правила дорабатывать, либо вам придется пожертвовать безопасностью и открыть права на редактирование поля (затем можно скрыть его визуально через тот же JS).
Мне просто для определенных пользователей нужно оставить редактирование, а для других скрыть.. А вот как обработать пользователей через JS я не в курсе((

#226 CbCoder

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

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

Отправлено 26 Май 2015 - 09:02

Просмотр сообщенияserg63rus (25 Май 2015 - 18:12) писал:

Вы имеете ввиду скрыть кнопку "Редактирования"?

Нет, я имею ввиду скрыть поле, стандартной функцией display_field.

Просмотр сообщенияserg63rus (26 Май 2015 - 06:36) писал:

Мне просто для определенных пользователей нужно оставить редактирование, а для других скрыть.. А вот как обработать пользователей через JS я не в курсе((

В JS можно проверять id пользователя через переменную user.id.

#227 Intro

    Участник

  • Пользователи
  • PipPip
  • 26 сообщений

Отправлено 01 Октябрь 2015 - 13:35

Подскажите пожалуйста по JS в дополнительных действиях.
Имеется два дополнительных действия Вызов инженера и Прием в ремонт. Они ведут в одну и ту же таблицу "Заявка инженеру", из которой печатается два документа "выезд инженера", "сервисный центр" соответственно.
Не можем сообразить каким образом привязать к нажатию на кнопку следующие события:
1. Установка в одном из полей вызываемой таблицы значения "Х";
2. Отображение/скрытие одного из полей.
3. По окончании заполнения заявки и нажатии кнопки "распечатать" автоматически вывести необходимый шаблон печати, минуя выбор шаблонов?
PS Прошу прощения за возможно глупые вопросы, но знающий человек у нас отпуске еще 3 недели.

#228 CbCoder

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

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

Отправлено 01 Октябрь 2015 - 14:42

JS в дополнительном действии здесь абсолютно не причем. Он вызывается до выполнения кода действия и, соответственно, до каких-либо переходов в другую таблицу. Это все решается другими средствами:

1. В адресной строке перенаправления внутри кода доп.действия можно добавить конструкцию "f111=xxx", где 111 - id нужного поля, xxx - передаваемое значение. Естественно, значение должно быть закодировано функцией urlencode. Тогда значение автоматом подставится в поле после перехода.
2. Как скрыть/отобразить поле, подробно описано в этой теме. Как уже сказал, JS в доп.действии тут не поможет, скрывать нужно в той записи, куда переходите (а не там, где жмете кнопку), через JS в поле, при событии загрузки страницы.
3. Тут тем более вышеописанные доп.действия никакого отношения к задаче не имеют. Стандартную кнопку Распечатать изменить нельзя (она всегда будет список шаблонов отображать), но можно создать свою, как доп.действие, с прямым перенаправлением в нужный шаблон.

#229 TelecomMedia

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

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 01 Октябрь 2015 - 16:13

Не получается скрыть группу полей. Группа идет после поля "Статус"

В поле "Статус" js код:

function onchange_{$one_field.id}()
{
  display_fgroup(2230, document.getElementById('value{$one_field.id}').value!="Новая");
}
addHandler(document.getElementById('value{$one_field.id}'), 'onchange', onchange_{$one_field.id});

Так вот, при открытии записи со статусом Новая, группа открыта. При редактировании статуса сначала на В работе, а затем на Новая - группа скрывается.
Вопрос: как скрфть группу по умолчанию?

#230 CbCoder

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

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

Отправлено 01 Октябрь 2015 - 16:24

Так у вас в коде и нет запуска скрытия при открытии записи, есть только привязка функции к событию изменения текущего поля. В код необходимо добавить конструкцию "$(onchange_{$one_field.id});", она запустит функцию после загрузки страницы:

function onchange_{$one_field.id}()
{
  display_fgroup(2230, document.getElementById('value{$one_field.id}').value!="Новая");
}
addHandler(document.getElementById('value{$one_field.id}'), 'onchange', onchange_{$one_field.id});
$(onchange_{$one_field.id}); // запуск функции onchange_{$one_field.id} после загрузки страницы


#231 TelecomMedia

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

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 01 Октябрь 2015 - 17:02

Спасибо!

#232 TelecomMedia

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

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 01 Октябрь 2015 - 21:37

Подскажите еще вот какой момент: возможно ли с помощью js "подсветить" (т.е. выделить как обязательные для заполнения) необходимые поля при выборе определенного значения в поле?

#233 CbCoder

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

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

Отправлено 02 Октябрь 2015 - 10:40

Можно установить значение скрытого поля main в единицу:

document.getElementById('main111').value = 1; // 111 заменяете на id нужного поля

Этот код сделает поле с id 111 обязательным.

#234 z0ddak

    Участник

  • Пользователи
  • PipPip
  • 23 сообщений
  • Пол:Мужчина
  • Город:Барнаул
  • Интересы:разработка

Отправлено 27 Ноябрь 2015 - 11:49

По скрытию всего поля более менее понятно, а как реализовать такое: есть два поля типа список: поле_1 (id поля id_1, со значениями: 1.1, 1.2, 1.3) и поле_2 (id поля id_2, со значениями: 2.1, 2.2, 2.3) Как скрывать некоторые значения поле_2 по выбору значения поле_1:

нужна такая логика

в поле_1 выбираем значение 1.1 - поле_2 должно отобразить значение 2.2
в поле_1 выбираем значение 1.2 - поле_2 должно отобразить значение 2.1 и 2.3
в поле_1 выбираем значение 1.3 - поле_2 должно отобразить значение 2.1, 2.2 и 2.3

Я понимаю, что нужно по событию выбора какого то значения в списке поле_1 скрывать определенные значения списка поле_2, но выразить в коде пока сам не могу - только учусь. Подскажите пожалуйста нужный код)...

Сообщение отредактировал z0ddak: 27 Ноябрь 2015 - 11:53


#235 Dinak

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

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

Отправлено 27 Ноябрь 2015 - 12:17

Вам нужна функция Switch (Javascript), вписываете условия в оба поля (1 и 2), у вас там должно получится 9 условий в каждом поле выбора (1 и 2 )

#236 z0ddak

    Участник

  • Пользователи
  • PipPip
  • 23 сообщений
  • Пол:Мужчина
  • Город:Барнаул
  • Интересы:разработка

Отправлено 27 Ноябрь 2015 - 12:26

Просмотр сообщенияDinak (27 Ноябрь 2015 - 12:17) писал:

Вам нужна функция Switch (Javascript), вписываете условия в оба поля (1 и 2), у вас там должно получится 9 условий в каждом поле выбора (1 и 2 )

А примерчик кода можете набросать? Буду очень признателен Вам, сам пока не знаю как написать...

#237 z0ddak

    Участник

  • Пользователи
  • PipPip
  • 23 сообщений
  • Пол:Мужчина
  • Город:Барнаул
  • Интересы:разработка

Отправлено 27 Ноябрь 2015 - 12:48

...дело еще в том, что в примере:
в поле_1 - 3 значения, а на самом деле их 7
и в поле_2 - 3 значения, а на самом деле их 24
тогда пополучится 7x24=168 условий? многовато. Может быть можно как то рациональней решить эту задачку?..

#238 Dinak

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

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

Отправлено 27 Ноябрь 2015 - 13:26

function onchange_{$one_field.id}()
{ // Функция по событию "изменение поля"
  var change = document.getElementById('value11460').value;
  switch(cahnge)
  {
		 case '1': // при выборе значения 1 в текущем поле
		 {
				display_field(id поля, 1); //1 - показать поле с id, 0 спрятать
				// например
				display_field(12850, 0); // спрятать поле с id 12850
				break;
		 }
		 case '2': //  при выборе значения 2 в текущем поле
		 {
			   display_field(id поля, 1); //1 - показать, 0 спрятать
			   // например
			   display_field(750, 1);
			   break;
		 }
		
И так далее пишите все case, затем аналогичное вычисление вставляете в поле "2" и пишите для него свои case и условие в каждом case
  }
}
addHandler(document.getElementById('value{$one_field.id}'), 'onchange', onchange_{$one_field.id});
$(onchange_{$one_field.id});

value11460 - цифры это id поля в которое вставляете вычисление и в зависимости от которого срабатывает вычисление.

Сообщение отредактировал Dinak: 27 Ноябрь 2015 - 13:27


#239 z0ddak

    Участник

  • Пользователи
  • PipPip
  • 23 сообщений
  • Пол:Мужчина
  • Город:Барнаул
  • Интересы:разработка

Отправлено 27 Ноябрь 2015 - 13:54

Просмотр сообщенияDinak (27 Ноябрь 2015 - 13:26) писал:

function onchange_{$one_field.id}()
{ // Функция по событию "изменение поля"
  var change = document.getElementById('value11460').value;
  switch(cahnge)
  {
		 case '1': // при выборе значения 1 в текущем поле
		 {
				display_field(id поля, 1); //1 - показать поле с id, 0 спрятать
				// например
				display_field(12850, 0); // спрятать поле с id 12850
				break;
		 }
		 case '2': //  при выборе значения 2 в текущем поле
		 {
			   display_field(id поля, 1); //1 - показать, 0 спрятать
			   // например
			   display_field(750, 1);
			   break;
		 }
		
И так далее пишите все case, затем аналогичное вычисление вставляете в поле "2" и пишите для него свои case и условие в каждом case
  }
}
addHandler(document.getElementById('value{$one_field.id}'), 'onchange', onchange_{$one_field.id});
$(onchange_{$one_field.id});

value11460 - цифры это id поля в которое вставляете вычисление и в зависимости от которого срабатывает вычисление.

Dinak, спасибо Вам огромное за помощь, но немного непонятно: в конструкциях case указываются условия скрытия полей, а мне нужно значения второго списка поля частично скрывать. Как бы сортировать его, показывая тот или иной его набор, в зависимости от выбранного значения первого списка. Ну вот что то подобное, только на КБ такое не применить... Может я туплю конечно))

#240 z0ddak

    Участник

  • Пользователи
  • PipPip
  • 23 сообщений
  • Пол:Мужчина
  • Город:Барнаул
  • Интересы:разработка

Отправлено 27 Ноябрь 2015 - 14:59

Ребят, ну кто нибудь еще подскажет?..





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

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