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


показ/скрытие полей по условию


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

#1 nk

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

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

Отправлено 06 Ноябрь 2012 - 22:13

Есть поле типа "список", три строки: техническое/психология/другое. Есть три группы "для технических", "для психологии", "для остальных", под каждой группой десяток полей. Надо чтобы при выборе "техническое" отображалась группа и поля "для технических", и при этом скрывались группа и поля "для психологии" и наоборот.

javascript в этом поле

display_fgroup(1, document.getElementById('value{$one_field.id}').value == 'техническое');
display_fgroup(2, document.getElementById('value{$one_field.id}').value == 'психология');

function onchange_{$one_field.id}()
{
display_fgroup(1, document.getElementById('value{$one_field.id}').value == 'техническое');
display_fgroup(2, document.getElementById('value{$one_field.id}').value == 'психология');
}
$('#value{$one_field.id}').bind('change', onchange_{$one_field.id});


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

Это баг, или надо ещё какие-то события обрабатывать?

Прикрепленные изображения

  • Прикрепленное изображение: p3.jpg
  • Прикрепленное изображение: p2.jpg
  • Прикрепленное изображение: p1.jpg


#2 nk

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

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

Отправлено 06 Ноябрь 2012 - 23:42

Для полей нужный эффект достигается переносом строки
display_field(1, document.getElementById('value{$one_field.id}').value == 'техническое');
в javascript самого отображаемого поля... а как быть с группами?

Сообщение отредактировал nk: 07 Ноябрь 2012 - 09:28


#3 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 07 Ноябрь 2012 - 01:17

Просмотр сообщенияnk (06 Ноябрь 2012 - 22:13) писал:

Все скрывается/отображается как надо при изменении значения в поле типа "список" и при открытии записи. Но при нажатии кнопки "редактировать" отображаются обе группы, и то же самое при создании записи, когда значение из списка ещё не выбрано.
Какой браузер у Вас? Подобная проблема наблюдалась у меня в Opera. Он не воспринимает value в режиме редактирования почему-то. В вашем случае это примерно так:
display_fgroup(1, document.getElementById('value{$one_field.id}').innerText == 'техническое');

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#4 nk

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

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

Отправлено 07 Ноябрь 2012 - 09:33

Просмотр сообщенияandibrag (07 Ноябрь 2012 - 01:17) писал:

Какой браузер у Вас?
Хром последний


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


​в чейндже оставил value, в начале модуля innerText - все работает так же, как описано в первом посте

Сообщение отредактировал nk: 07 Ноябрь 2012 - 09:37


#5 nk

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

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

Отправлено 07 Ноябрь 2012 - 09:34

Для группы нельзя вписать яваскрипт
display_fgroup(1, document.getElementById('value{$one_field.id}').value == 'техническое');
?

Сообщение отредактировал nk: 07 Ноябрь 2012 - 09:35


#6 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 07 Ноябрь 2012 - 09:57

Просмотр сообщенияnk (07 Ноябрь 2012 - 09:34) писал:

Для группы нельзя вписать яваскрипт
display_fgroup(1, document.getElementById('value{$one_field.id}').value == 'техническое');
?
В crome это должно работать.
Посмотрел у себя. - попробуйте махнуть местами. В onchange оставьте innerText, в начале модуля value.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#7 nk

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

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

Отправлено 07 Ноябрь 2012 - 10:00

Просмотр сообщенияandibrag (07 Ноябрь 2012 - 09:57) писал:

В crome это должно работать.
Посмотрел у себя. - попробуйте махнуть местами. В onchange оставьте innerText, в начале модуля value.

нет, при редактировании все появляются, при любом выборе все исчезают (в IE аналогично все)

display_fgroup(1, document.getElementById('value{$one_field.id}').value == 'техническое');
display_fgroup(2, document.getElementById('value{$one_field.id}').value == 'психология');

function onchange_{$one_field.id}()
{
display_fgroup(1, document.getElementById('value{$one_field.id}').innerText == 'техническое');
display_fgroup(2, document.getElementById('value{$one_field.id}').innerText == 'психология');
}
$('#value{$one_field.id}').bind('change', onchange_{$one_field.id});

Сообщение отредактировал nk: 07 Ноябрь 2012 - 10:02


#8 nk

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

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

Отправлено 07 Ноябрь 2012 - 10:08

Может быть проблема связана с тем, что value{$one_field.id} это поле "список"?

#9 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 07 Ноябрь 2012 - 11:47

Странно, однако. У меня работает, но только bind я не использую. Там есть какие-то нюансы, связанные с построением DOM.
Попробуйте более банальное:
addHandler(document.getElementById("value{$one_field.id}"), "onchange", onchange_{$one_field.id});

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#10 nk

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

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

Отправлено 07 Ноябрь 2012 - 11:56

Пичего не изменилось, даже перезашел и куки почистил. В обработчике вернул сравнение с value.

Ещё раз: при создании записи и при входе в редактирование отображаются обе группы, при просмотре записи и при изменении значения поля "список" отображение происходит правильно.
У группы нельзя написать javascript. У полей display_field(123, document.getElementById('value{$one_field.id}').value =='психология'); я пишу именно именно в отображаемом поле (а не в изменяемом поле) - и с полями все ок.

#11 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 07 Ноябрь 2012 - 14:41

Сорри. Забыл упомянуть про один нюанс. Скрипт должен отработать только после загрузки всей страницы.
Добавьте в начало
$(document).ready(function(){
и закройте это все в конце
})

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#12 nk

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

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

Отправлено 07 Ноябрь 2012 - 14:47

Просмотр сообщенияandibrag (07 Ноябрь 2012 - 14:41) писал:

Сорри. Забыл упомянуть про один нюанс. Скрипт должен отработать только после загрузки всей страницы.
Добавьте в начало
$(document).ready(function(){
и закройте это все в конце
})

да, теперь все ок (везде использую value)


можете объяснить суть этой функции? почему с полями все работает без нее?

Сообщение отредактировал nk: 07 Ноябрь 2012 - 14:47


#13 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 07 Ноябрь 2012 - 15:01

Просмотр сообщенияnk (07 Ноябрь 2012 - 14:47) писал:

можете объяснить суть этой функции? почему с полями все работает без нее?
С полями тоже в частном случае может не работать. Если попроще - без этой функции javascript начнет работать еще до того, как страница полностью сформируется - она же загружается постепенно (построчно). Т.е. может произойти обращение к элементам, которых на странице еще нет, например. Выскочит ошибка. Но это частный случай. Строка выше блокирует запуск скрипта до момента пока не сформируется весь DOM. Дословно пока document не станет ready.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#14 nk

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

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

Отправлено 07 Ноябрь 2012 - 15:04

И всё-таки работает не идеально: если выбрано пустое значение, при входе в редактирование обе группы скрыты - ок; если выбрать значение "психология" - появляется одна группа - ок; но при отказе от сохранения возвращаемся в просмотр и видим отображенную группу "психология", хотя значение выбрано пустое (не сохранили запись).

Такое чувство, что надо как-то по-другому делать.

#15 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 07 Ноябрь 2012 - 16:11

Просмотр сообщенияnk (07 Ноябрь 2012 - 15:04) писал:

если выбрать значение "психология" - появляется одна группа - ок; но при отказе от сохранения возвращаемся в просмотр и видим отображенную группу "психология", хотя значение выбрано пустое (не сохранили запись)
В случае отказа от изменений, я как раз сегодня писал об этом в техподдержку, возникает ситуация, когда отследить нечего. Событий вроде onchange не возникает. К чему привязывать функции - непонятно. Надеюсь вылечат.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#16 nk

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

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

Отправлено 07 Ноябрь 2012 - 23:14

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

разобрался, http://clientbase.ru...indpost&p=11222

Сообщение отредактировал nk: 07 Ноябрь 2012 - 23:40


#17 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 08 Ноябрь 2012 - 01:01

Просмотр сообщенияnk (07 Ноябрь 2012 - 23:14) писал:

Какое условие поставить и на какое событие вешать, чтобы определить, что напротив определенного значения стоит галочка или не стоит?
Событие будет то же - onchange. Сложнее с переменными. В value лежит количество выбранных строк из списка, а не значение поля. Как вариант можно проверять значение
$("[name='value[line_id][{$one_field.id}][]']")[X].checked
, где line_id - текущий id записи (значение line в адресной строке), X - номер строки в списке Вашего поля с множественным выбором (начинается с нуля). line_id можно получить либо сделав парсинг адресной строки, либо, если таковое предусмотрено разработчиками, использовать предопределенную ими переменную (может смарти-переменная есть). Если напротив строки из списка стоит галочка, вышенаписанное условие должно содержать true. Остальное дело техники.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#18 nk

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

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

Отправлено 08 Ноябрь 2012 - 01:04

Да, тут проблема есть, в параллельной ветке этот вопрос задан. Подождем ответа техподдержки: как все-таки правильнее сделать.

Сообщение отредактировал nk: 08 Ноябрь 2012 - 01:05


#19 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 08 Ноябрь 2012 - 01:10

Просмотр сообщенияnk (07 Ноябрь 2012 - 23:14) писал:

разобрался
Решение более лаконичное. Все оказалось несколько проще :)

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#20 nk

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

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

Отправлено 08 Ноябрь 2012 - 01:11

Просмотр сообщенияandibrag (08 Ноябрь 2012 - 01:10) писал:

Решение более лаконичное. Все оказалось несколько проще :)

Не понял, так у вас работает для множественного выбора? Можете рабочий код показать?





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

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