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


Показывать подтаблицу по условию


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

#1 etpu

    Участник

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

Отправлено 11 Апрель 2012 - 07:32

Здравствуйте.

Есть основная таблица "Договор" и 2 связанные с ней таблицы "Список оборудования" и "Список Услуг".
Необходимо, чтобы при выборе в поле "Тип договора" таблицы "Договор" внизу отображалась одна либо другая таблица.

Пример: если выбрали в поле "Тип договора" - "Услуги", то внизу появлялась вкладка с таблицей "Список услуг" куда мы добавляем услуги по этому договору.
Если выбираем в поле "Тип договора" - "Оборудование", то внизу вместо таблицы "Список услуг" появляется таблица "Список оборудования".

Можно ли так сделать? И как?


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

#2 Гость_Roman_*

  • Гости

Отправлено 11 Апрель 2012 - 08:23

Например, поле с типом договора имеет id 111, а подтаблицы имеют id 222 и 333 соответственно.
function onchange_111()
{
  if (document.getElementById("value111").value == "Услуги")
	{
	  document.getElementById('tab_222').style.display = '';
	  switch_subtable(222);
	  document.getElementById('tab_333').style.display = 'none';
	}
  else
	{
	  document.getElementById('tab_333').style.display = '';
	  switch_subtable(333);
	  document.getElementById('tab_222').style.display = 'none';
	}
}
{literal}
$(document).ready(function() {
  onchange_111();
});
{/literal}
addHandler(document.getElementById("value111"), "onchange", onchange_111);


#3 etpu

    Участник

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

Отправлено 11 Апрель 2012 - 08:40

А как узнать ID подтаблицы?

#4 Гость_Roman_*

  • Гости

Отправлено 11 Апрель 2012 - 08:48

Например, перейти в эту таблицу и посмотреть адресную строчку.

#5 etpu

    Участник

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

Отправлено 11 Апрель 2012 - 09:25

Я правильно понимаю это та самая table=94 например?

#6 Гость_Roman_*

  • Гости

Отправлено 11 Апрель 2012 - 09:26

Да, 94 - это и будет id подтаблицы.

#7 arsenal

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

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

Отправлено 11 Апрель 2012 - 12:18

А можно также по условию скрывать и кнопки доп. действий?

#8 Гость_Roman_*

  • Гости

Отправлено 11 Апрель 2012 - 12:35

Конечно. На каждое доп. действие на странице есть 2 кнопки, одна в режиме просмотра, другая - в режиме редактирования.
Чтобы скрыть обе кнопки воспользуйтесь следующим кодом:
document.getElementById("user_button_div_15").style.display = 'none';
document.getElementById("e_user_button_div_15").style.display = 'none';
Естесственно, вместо 15 поставив id Вашего доп. действия и заключив эти строчки в условие, по которому они будут скрыватся.

ВНИМАНИЕ! На настоящий момент настоятельно рекомендуется использовать правила для скрытия доп.действий.

Сообщение отредактировал CbCoder: 21 Сентябрь 2016 - 15:46


#9 arsenal

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

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

Отправлено 11 Апрель 2012 - 14:37

Отлично.
Аналогичным образом можно управлять любыми элементами?
Насколько я понимаю у Вас на каждый элемент страницы просмотра/редактирования есть свой идентификатор (ID), которым можно управлять через JS. Или есть ограничения?
И как посмотреть эти идентификаторы?

#10 Гость_Roman_*

  • Гости

Отправлено 11 Апрель 2012 - 14:45

Большинство элементов имеют идентификаторы, увидеть идентификаторы нужного элемента можно, просмотрев исходный код страницы.
А ещё проще, чтобы не искать нужное место, можно воспользоваться инструментами браузеров. Почти во всех современных браузерах при клике на правой кнопке мыши можно найти пункт меню типа "Анализировать элемент" или "Проинспектировать элемент". При этом откроется исходный код страницы, но уже будет выделен выбранный элемент. В Mozilla Firefox для этих целей необходимо установить дополнение Firebug.

#11 arsenal

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

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

Отправлено 13 Апрель 2012 - 02:49

Просмотр сообщенияRoman (11 Апрель 2012 - 12:35) писал:

Конечно. На каждое доп. действие на странице есть 2 кнопки, одна в режиме просмотра, другая - в режиме редактирования.
Чтобы скрыть обе кнопки воспользуйтесь следующим кодом:
document.getElementById("user_button_div_15").style.display = 'none';
document.getElementById("e_user_button_div_15").style.display = 'none';
Естесственно, вместо 15 поставив id Вашего доп. действия и заключив эти строчки в условие, по которому они будут скрыватся.
Куда вставлять этот код? Пробовал в разные поля - не скрывает. Может это связано с тем, что кнопки выводятся на страницу после полей?

#12 Гость_Roman_*

  • Гости

Отправлено 13 Апрель 2012 - 08:00

Да, кнопки выводятся после полей. Для правильной работы эту часть кода необходимо вызывать после загрузки страницы. Например, с помощью Jquery.

{literal}
$(document).ready(function(){
  document.getElementById("user_button_div_15").style.display = 'none';
  document.getElementById("e_user_button_div_15").style.display = 'none';
});
{/literal}

Такой Javascript можно добавить в любое поле.

#13 arsenal

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

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

Отправлено 13 Апрель 2012 - 12:26

спасибо, все работает

#14 arsenal

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

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

Отправлено 13 Апрель 2012 - 13:51

Просмотр сообщенияRoman (11 Апрель 2012 - 08:23) писал:

Например, поле с типом договора имеет id 111, а подтаблицы имеют id 222 и 333 соответственно.
 function onchange_111() { if (document.getElementById("value111").value == "Услуги") { document.getElementById('tab_222').style.display = ''; switch_subtable(222); document.getElementById('tab_333').style.display = 'none'; } else { document.getElementById('tab_333').style.display = ''; switch_subtable(333); document.getElementById('tab_222').style.display = 'none'; } } {literal} $(document).ready(function() { onchange_111(); }); {/literal} addHandler(document.getElementById("value111"), "onchange", onchange_111); 
Чтобы полностью скрыть подтаблицу надо еще добавить строку
document.getElementById('sub_ХХХ').style.display = 'none';

А как скрыть эту подтаблицу и в разделе "Связанные таблицы"? Смотрел по исходнику - ID у них нет. Через отключение доступа - не вариант, доступ должен быть.

Сообщение отредактировал arsenal: 13 Апрель 2012 - 13:52


#15 Гость_Roman_*

  • Гости

Отправлено 13 Апрель 2012 - 14:02

Функция switch_subtable() сделает тоже действие, что и эта строчка
document.getElementById('sub_ХХХ').style.display = 'none';

Скрыть связанные таблицы в списке можно с помощью JQuery. Поскольку код довольно специфичный и ёмкий, описывать его здесь не буду. Могу лишь сказать, что надо выделить все элементы списка через какой-нибудь селектор и пройтись по ним циклом each. Если по каким-то условиям элемент подходит, то скрываем его.

#16 etpu

    Участник

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

Отправлено 13 Апрель 2012 - 14:55

Небольшая проблема со скрытием вкладок ПодТаблиц (внизу). При открытии страницы показывается только вкладка и она пустая. Необходимо нажать на другую вкладку или на эту чтобы отобразились записи под ней. Естественно так же и не видно кнопки Добавить запись.
Можно ли как то сделать чтобы вкладка отображалась сразу корректно?

#17 smart

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

  • Пользователи
  • PipPipPip
  • 297 сообщений
  • Пол:Мужчина
  • Интересы:v1980.8@gmail.com

Отправлено 13 Апрель 2012 - 15:02

А можно скрыть обычную таблицу определенному пользователю? Например как можно скрывать представления.

#18 Гость_Roman_*

  • Гости

Отправлено 14 Апрель 2012 - 11:03

Просмотр сообщенияetpu (13 Апрель 2012 - 14:55) писал:

Небольшая проблема со скрытием вкладок ПодТаблиц (внизу). При открытии страницы показывается только вкладка и она пустая. Необходимо нажать на другую вкладку или на эту чтобы отобразились записи под ней. Естественно так же и не видно кнопки Добавить запись.
Можно ли как то сделать чтобы вкладка отображалась сразу корректно?
Похоже, что Вы где-то ошиблись в коде. Приведённый код делает всё правильно.

Просмотр сообщенияsmart (13 Апрель 2012 - 15:02) писал:

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

#19 Lovent

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

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

Отправлено 17 Май 2012 - 17:57

Роман, а как себя ведет код, когда подтаблица одна и единственная?
function onchange_2956()
{
  if (document.getElementById("value2956").value == "Есть вопрос")
	    {
		  document.getElementById('tab_194').style.display = '';
		  // switch_subtable(194);
		  // document.getElementById('tab_333').style.display = 'none';
	    }
  else
	    {
		  // document.getElementById('tab_333').style.display = '';
		  // switch_subtable(333);
		  document.getElementById('tab_194').style.display = 'none';
	    }
}
{literal}
$(document).ready(function() {
  onchange_2956();
});
{/literal}
addHandler(document.getElementById("value2956"), "onchange", onchange_2956);
Почему-то у меня пропало название подтаблицы в режиме просмотра записи основной таблицы, но записи подтаблицы и кнопка "добавить запись" остались? почему?

код такой:

#20 Гость_Roman_*

  • Гости

Отправлено 18 Май 2012 - 08:56

У Вас закомментирована функция switch_subtable(), которая скрывала все таблицы, кроме той, что указана в параметре.
function onchange_2956()
{
  if (document.getElementById("value2956").value == "Есть вопрос")
			{
				  document.getElementById('tab_194').style.display = '';
				  document.getElementById('sub_194').style.display = '';
			}
  else
			{
				  document.getElementById('tab_194').style.display = 'none';
				  document.getElementById('sub_194').style.display = 'none';
			}
}
{literal}
$(document).ready(function() {
  onchange_2956();
});
{/literal}
addHandler(document.getElementById("value2956"), "onchange", onchange_2956);
Такой код должен быть корректен для Вашего случая.





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

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