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


Автосохранение и презагрузка траницы при изменении поля


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

#1 Cutter

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

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

Отправлено 28 Январь 2017 - 13:39

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

Вопрос связан с предыдущим: https://clientbase.r...?showtopic=7503
Тот я решил, но при добавлении записи она не встаёт в нужную группу, пока не сохранишь и не перезагрузишь страницу...

Сообщение отредактировал Cutter: 28 Январь 2017 - 13:43


#2 andibrag

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

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

Отправлено 30 Январь 2017 - 21:27

Просмотр сообщенияCutter (28 Январь 2017 - 13:39) писал:

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

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

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

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


#3 Cutter

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

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

Отправлено 31 Январь 2017 - 11:13

Спасибо!
Костыль, конечно, но вроде должно работать. Попробуем.

#4 Cutter

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

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

Отправлено 31 Январь 2017 - 11:22

Что-бы не создавать новую тему, спрошу здесь:

Вычисление в подтаблице
if ($event['type'] == "save") $line['Заказы']['Есть дизайн']='Да';

На которое стоит условие "при сохранении в таблице"
Должно изменять значение поля основной таблицы (Заказы), при добавлении записи в подтаблицу.

Мало того, что оно не работает, но при условии "при сохранении в таблице" блокирует показ вновь созданной записи подтаблицы аяксом.
Если условие "изменение поля", аякс новую запись показывает нормально, но вычисление всё равно не срабатывает.

В чём я не прав???

#5 CbCoder

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

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

Отправлено 31 Январь 2017 - 12:44

if ($event['type'] == "save")

А это вам зачем? Установки события в настройках не хватает что ли?

#6 Cutter

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

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

Отправлено 31 Январь 2017 - 12:47

Просмотр сообщенияCbCoder (31 Январь 2017 - 12:44) писал:

if ($event['type'] == "save")

А это вам зачем? Установки события в настройках не хватает что ли?
Просто попытка нащупать методом тыка причину несрабатывания.
Первоначально было просто присвоение, с теми же эффектами.

#7 Cutter

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

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

Отправлено 31 Январь 2017 - 13:32

Такой вариант: data_update( 130, EVENTS_ENABLE, array('f5480' => 'Да') );
срабатывает, но пе подхватывается аяксом.
Т.е. значение поля основной таблицы меняется, но этого не видно пока не перезагрузишь страницу.

#8 Cutter

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

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

Отправлено 31 Январь 2017 - 17:51

Додумался глянуть в лог...

Имеем:
URL: /update_value.php
Ошибка: Ошибка SQL запроса:
UPDATE cb_data360 SET Заказы='' WHERE id=17
Unknown column 'Заказы' in 'field list'
Подробно:
Ошибка системы.
Error generated:
/home/a/arapri1x/arapri1x.beget.tech/public_html/include/functions1.php(564) : data_update()
/home/a/arapri1x/arapri1x.beget.tech/public_html/include/functions1.php(648) : form_event_recurs()
/home/a/arapri1x/arapri1x.beget.tech/public_html/update_value.php(303) : calc_line()
Ошибка SQL запроса:
UPDATE cb_data360 SET Заказы='' WHERE id=17
Unknown column 'Заказы' in 'field list'

Ощущение, что на каком то этапе не происходит трансляция имени поля во внутренний формат.

#9 CbCoder

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

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

Отправлено 01 Февраль 2017 - 10:59

Так нет такого имени поля значит - это очевидно же.

Можно при написании вычисления писать не $line['Имя поля'], а $line['f111'], где 111 - id поля. После сохранения вычисления туда подставится "Имя поля". Если же не подставится - значит уже ошиблись с id.

#10 Cutter

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

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

Отправлено 01 Февраль 2017 - 11:27

Разобрался уже.
У меня просто ум за разум зашел, вместо имени поля связи, писал в первый индекс имя таблицы в которой нужное мне поле...

#11 Cutter

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

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

Отправлено 01 Февраль 2017 - 11:36

Просмотр сообщенияandibrag (30 Январь 2017 - 21:27) писал:

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

Попробовал, не желает так работать. Насколько я понял, потому что пользовательский js работает с полями формы, в режиме редактирования, а мне нужно работать с режимом просмотра...

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

#12 andibrag

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

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

Отправлено 01 Февраль 2017 - 12:40

Просмотр сообщенияCutter (01 Февраль 2017 - 11:36) писал:

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

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

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

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


#13 Cutter

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

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

Отправлено 02 Февраль 2017 - 16:12

Э... я, видимо, как-то не так выразился.
Разумеется javascript работает всегда, но как это меняет тот печальный факт, что событие onchange может быть только у элемента input, но никак не у span...?
Сильно внимательно скрипты страницы не изучал, но терзают меня смутные сомнения, что ни один из них не отслеживает DOM структуру на предмет модификации узлов и реакции на оную. Просто за ненадобностью такого контроля.

#14 andibrag

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

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

Отправлено 02 Февраль 2017 - 16:47

Просмотр сообщенияCutter (02 Февраль 2017 - 16:12) писал:

событие onchange может быть только у элемента input, но никак не у span...?
Сильно внимательно скрипты страницы не изучал, но терзают меня смутные сомнения, что ни один из них не отслеживает DOM структуру на предмет модификации узлов и реакции на оную. Просто за ненадобностью такого контроля.
Самому стало интересно. Проверю - отпишу.

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

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

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


#15 andibrag

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

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

Отправлено 02 Февраль 2017 - 17:44

Просмотр сообщенияCutter (02 Февраль 2017 - 16:12) писал:

событие onchange может быть только у элемента input, но никак не у span...?
Единственное, что пришло на ум - это через setinterval проверять содержимое элемента. Это уже реальный костыль.

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

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

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


#16 Cutter

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

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

Отправлено 03 Февраль 2017 - 08:46

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

#17 CbCoder

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

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

Отправлено 03 Февраль 2017 - 09:33

Цитата

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

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

#18 andibrag

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

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

Отправлено 04 Февраль 2017 - 00:27

Просмотр сообщенияCbCoder (03 Февраль 2017 - 09:33) писал:

... обычно такое обходится включением прав и скрытием поля через тот же JS. В итоге поле не видно, но обрабатывать его можно.
Проблема в другом. Событие onchange срабатывает только для полей типа input. В данном случае в режиме просмотра происходит изменение содержимого элемента div. Если на примере счета: изменение позиции счета запускает вычисление и в режиме онлайн в счете (родительской таблице) меняется сумма. Это уже события DOM. Поэтому простыми средствами его не отследить.

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

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

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






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

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