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


изменение поля и чтобы другое поле стало обязательным для заполнения


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

#1 master2015

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

  • Пользователи
  • PipPipPip
  • 36 сообщений
  • Пол:Мужчина
  • Интересы:Программирование

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

Добрый день! Подскажите пожалуйста. Есть 2 поля, первое - фиксированый список (например статус1, статус2, статус3) , второе - дата.
Как сделать, чтобы при редактировании записи в таблице, если в первом поле внес изменение - выбрал статус 2, чтобы второе поле стало обязательным для заполнения и без него нельзя сохранить запись.

Без выбора этого статуса второе поле должно быть необязательно для заполнения, в т.ч. и при создании записи.


Спасибо большое если подскажите!

#2 CbCoder

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

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

Отправлено 12 Январь 2016 - 16:36

https://clientbase.r...indpost&p=29315

#3 master2015

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

  • Пользователи
  • PipPipPip
  • 36 сообщений
  • Пол:Мужчина
  • Интересы:Программирование

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

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


вот на это ругается

1: document.getElementById('$one_field.4310').value = 1; //

syntax error, unexpected '='


у меня есть таблица и в ней поле по адресу в строке.... /edit_field.php?table=130&field=4310


#4 CbCoder

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

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

Отправлено 12 Январь 2016 - 17:37

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

Я уж не говорю про то, что вы исказили странным образом даже эту одну строку кода, в сообщении по ссылке он совершенно другой. Никаких "$one_field" там и в помине нет. Читайте комментарий к строке.

#5 master2015

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

  • Пользователи
  • PipPipPip
  • 36 сообщений
  • Пол:Мужчина
  • Интересы:Программирование

Отправлено 12 Январь 2016 - 20:07

function onsubmit_1680()
{
if(document.getElementById('value1680').value=="значение№2")
document.getElementById('main4310').value = 1;
//1680 - id поля "статус"
// если значение№2 поля Статус выбрано, включаем обязательно для заполнения поле с номером 4310 (дата)
//иначе выключаем условие обяз выбора.
else(document.getElementById('main4310').value = 0);
}
addHandler(document.getElementById('value1680'), 'onsubmit', onsubmit_value1680);


функцию написал, но что то не работает. видимо условие if немного неправильно. если без условия, то
document.getElementById('main4310').value = 1; включает обязательность заполнения поля, тут все ок
функцию вставляю в JS поля №4310 (которая дата) (в первом посте пытался написать вычисление, но видимо вычислением тут не сработает)

Сообщение отредактировал master2015: 12 Январь 2016 - 20:33


#6 CbCoder

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

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

Отправлено 13 Январь 2016 - 09:16

Да вроде с точки зрения синтаксиса все правильно. Проверьте вывод значения document.getElementById('value1680').value в консоли браузера.

Upd: а нет, не все правильно. После else скобок быть не должно. Правда не уверен, что это приведет к ошибке, но логически это точно некорректно. Проверьте ошибки JS в той же консоли.

function onsubmit_1680()
{
    if (document.getElementById('value1680').value=="значение№2")
        document.getElementById('main4310').value = 1;
    else
        document.getElementById('main4310').value = 0;
}
addHandler(document.getElementById('value1680'), 'onsubmit', onsubmit_value1680);


#7 master2015

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

  • Пользователи
  • PipPipPip
  • 36 сообщений
  • Пол:Мужчина
  • Интересы:Программирование

Отправлено 13 Январь 2016 - 15:00

Просмотр сообщенияCbCoder (13 Январь 2016 - 09:16) писал:

Да вроде с точки зрения синтаксиса все правильно. Проверьте вывод значения document.getElementById('value1680').value в консоли браузера.

Upd: а нет, не все правильно. После else скобок быть не должно. Правда не уверен, что это приведет к ошибке, но логически это точно некорректно. Проверьте ошибки JS в той же консоли.

function onsubmit_1680()
{
	if (document.getElementById('value1680').value=="значение№2")
		document.getElementById('main4310').value = 1;
	else
		document.getElementById('main4310').value = 0;
}
addHandler(document.getElementById('value1680'), 'onsubmit', onsubmit_value1680);
консоль выдает вот это
Uncaught ReferenceError: onsubmit_value1680 is not defined

исправил в последней строчке на onsubmit_1680, ругаться перестало, но не работает..
выводит
->>document.getElementById('value1680').value
-<< "значение№2"
т.е. выводит правильное значение.
а вот это вот чтобы я не делал
document.getElementById('main4310').value

всегда выводит 0

Сообщение отредактировал master2015: 13 Январь 2016 - 15:29


#8 CbCoder

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

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

Отправлено 13 Январь 2016 - 15:44

А без условий:

function onsubmit_1680()
{
	  document.getElementById('main4310').value = 1;
}
addHandler(document.getElementById('value1680'), 'onsubmit', onsubmit_1680);

- все работает?

#9 master2015

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

  • Пользователи
  • PipPipPip
  • 36 сообщений
  • Пол:Мужчина
  • Интересы:Программирование

Отправлено 13 Январь 2016 - 16:16

без условий тоже не работает.
document.getElementById('main4310').value
выводит 0

Сообщение отредактировал master2015: 13 Январь 2016 - 16:21


#10 CbCoder

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

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

Отправлено 13 Январь 2016 - 16:30

А выше вы вроде писали что как раз таки работало:

Цитата

если без условия, то document.getElementById('main4310').value = 1; включает обязательность заполнения поля, тут все ок

Если же не работает, то возможно событие onsubmit просто срабатывает уже после проверок, и соответственно ставить main = 1 уже бессмысленно в этот момент. Вообще, это событие предназначалось для отмены сохранения, а если вам нужно проставить обязательность, то это можно (и видимо нужно) сделать еще до сохранения, а конкретно сразу после изменения поля 1680. Т.е. функция должна стоять на событие onchange данного поля.

#11 CbCoder

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

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

Отправлено 13 Январь 2016 - 16:38

Цитата

Вообще, это событие предназначалось для отмены сохранения

Уточню, на всякий случай: имеется ввиду собственный алгоритм отмены. Т.е. например, в данном случае, вы вместо простановки обязательности можете вывести в onsubmit свое сообщение "заполните такое то поле", и затем вернуть false. В этом случае сохранение отменится. А простановка обязательности означает, что будет использоваться встроенный алгоритм проверки и соответственно отмены сохранения. А вы просто ставите метку на поле, что его нужно проверять. Поэтому эту метку нужно поставить заранее, а не по событию сохранения, которое будет запущено уже после всех штатных проверок.

#12 master2015

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

  • Пользователи
  • PipPipPip
  • 36 сообщений
  • Пол:Мужчина
  • Интересы:Программирование

Отправлено 13 Январь 2016 - 17:15

		a=document.getElementById('value1680').value;
		if (a!=="Статус№2")
				document.getElementById('main4310').value = 0;
				else
				function onchange_1680()
{
		if (document.getElementById('value1680').value=="Статус№2")
				document.getElementById('main4310').value = 1;
		else
				document.getElementById('main4310').value = 0;
}
addHandler(document.getElementById('value1680'), 'onchange', onchange_1680);
				

В общем вот итоговый код. Все заработало :) Большое спасибо за помощь!


Просмотр сообщенияCbCoder (13 Январь 2016 - 16:30) писал:

А выше вы вроде писали что как раз таки работало:


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

Сообщение отредактировал master2015: 13 Январь 2016 - 17:32


#13 ber

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

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

Отправлено 10 Февраль 2016 - 11:02

А возможно такой код использовать, если оба поля - связи?
И этот код используется для поля, которое должно стать обязательным или для поля от значения которого зависит обязательность?
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#14 CbCoder

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

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

Отправлено 10 Февраль 2016 - 14:09

Просмотр сообщенияber (10 Февраль 2016 - 11:02) писал:

А возможно такой код использовать, если оба поля - связи?

А что может помешать, не совсем понял? Чем поля связи хуже других?

Цитата

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

Если под фразой "для поля" имеется ввиду в настройки какого именно поля вставляется, то в данном случае особо разницы нет, т.к. в коде используются явные id полей. Разница бывает только если используется шаблон {$one_field.id} в коде. Сама функция из кода настроена разумеется на событие изменения поля 1, т.к. именно от него зависит включение обязательности. Поэтому логичнее помещать код в его настройки, хотя как уже сказал это не играет особой роли, кроме как "быстро найти потом".

#15 ber

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

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

Отправлено 10 Февраль 2016 - 14:40

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

А что может помешать, не совсем понял? Чем поля связи хуже других?



Если под фразой "для поля" имеется ввиду в настройки какого именно поля вставляется, то в данном случае особо разницы нет, т.к. в коде используются явные id полей. Разница бывает только если используется шаблон {$one_field.id} в коде. Сама функция из кода настроена разумеется на событие изменения поля 1, т.к. именно от него зависит включение обязательности. Поэтому логичнее помещать код в его настройки, хотя как уже сказал это не играет особой роли, кроме как "быстро найти потом".


Вопрос возник поскольку после тестов ничего не сработало:

			    a=document.getElementById('value2031').value;
			    if (a!=="0")
							    document.getElementById('main12730').value = 0;
							    else
							    function onchange_2031()
{
			    if (document.getElementById('value2031').value=="0")
							    document.getElementById('main12730').value = 1;
			    else
							    document.getElementById('main12730').value = 0;
}
addHandler(document.getElementById('value2031'), 'onchange', onchange_2031);
// код выше - суть вопроса
display_field({$one_field.id}, document.getElementById('value1831').value=="Да");
// данный код не имеет отношения к вопросу, но вдруг все же влияет

www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#16 CbCoder

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

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

Отправлено 10 Февраль 2016 - 15:13

Во-первых, сам по себе код очень странный (изначально в оригинале). И то что он сработал у автора, скорее везение. Во-вторых условие с нулем может не всегда адекватно работать при "==" из-за преобразования типов.

#17 ber

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

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

Отправлено 10 Февраль 2016 - 15:49

Просмотр сообщенияCbCoder (10 Февраль 2016 - 15:13) писал:

Во-первых, сам по себе код очень странный (изначально в оригинале). И то что он сработал у автора, скорее везение. Во-вторых условие с нулем может не всегда адекватно работать при "==" из-за преобразования типов.

Действительно, испытал этот код на другом простом примере о текстовыми полями - 0 реакции.

Как правильно написать, что:
если поле связи 2031 не равно пусто, то поле связи 12730 обязательно к заполнению (иначе нельзя сохранить запись)

И еще в поле 2031 уже прописан код:

display_field({$one_field.id}, document.getElementById('value1831').value=="Да");

Эти два кода не должны мешать друг другу и работать параллельно.
Помогите, пожалуйста.
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#18 CbCoder

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

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

Отправлено 10 Февраль 2016 - 15:56

1. Вы про код целиком или конкретно про условие? Если первое, в теме по скрытию полей (искать ближе к концу посвежее) можно найти более адекватные примеры кода. Вам всего-то надо заменить скрытие поля на простановку маркера обязательности. Если второе, то в оригинале уже стоит нормальное условие, но можно заменить "==" на "===" если работать не будет.
2. Они никак не должны помешать друг другу.

#19 ber

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

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

Отправлено 10 Февраль 2016 - 16:33

Просмотр сообщенияCbCoder (10 Февраль 2016 - 15:56) писал:

1. Вы про код целиком или конкретно про условие? Если первое, в теме по скрытию полей (искать ближе к концу посвежее) можно найти более адекватные примеры кода. Вам всего-то надо заменить скрытие поля на простановку маркера обязательности. Если второе, то в оригинале уже стоит нормальное условие, но можно заменить "==" на "===" если работать не будет.
2. Они никак не должны помешать друг другу.

Вот такой код в итоге:

function onchange_{$one_field.id}()
{
  if (document.getElementById('value{$one_field.id}').value!=="0") document.getElementById('main12730').value = 1;
}
addHandler(document.getElementById('value{$one_field.id}'), 'onchange', onchange_{$one_field.id});
$(onchange_{$one_field.id});

Не работает.
Если ставлю условие ==="0", то это поле всегда обязательно.
Я как-то читал, что для полей связи не происходит события при выборе. Поэтому и спросил в самом начале, возможно ли использовать для поля связь...
Поэтому 2 вопроса:

1. Как все же правильно указать "не равно пусто" для поля связи
2. Будет ли оно работать с полями связи?
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#20 CbCoder

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

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

Отправлено 10 Февраль 2016 - 16:41

Цитата

Я как-то читал, что для полей связи не происходит события при выборе

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





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

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