изменение поля и чтобы другое поле стало обязательным для заполнения
#1
Отправлено 12 Январь 2016 - 14:44
Как сделать, чтобы при редактировании записи в таблице, если в первом поле внес изменение - выбрал статус 2, чтобы второе поле стало обязательным для заполнения и без него нельзя сохранить запись.
Без выбора этого статуса второе поле должно быть необязательно для заполнения, в т.ч. и при создании записи.
Спасибо большое если подскажите!
#3
#4
Отправлено 12 Январь 2016 - 17:37
Я уж не говорю про то, что вы исказили странным образом даже эту одну строку кода, в сообщении по ссылке он совершенно другой. Никаких "$one_field" там и в помине нет. Читайте комментарий к строке.
#5
Отправлено 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
Отправлено 13 Январь 2016 - 09:16
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
Отправлено 13 Январь 2016 - 15:00
CbCoder (13 Январь 2016 - 09:16) писал:
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
Отправлено 13 Январь 2016 - 15:44
function onsubmit_1680() { document.getElementById('main4310').value = 1; } addHandler(document.getElementById('value1680'), 'onsubmit', onsubmit_1680);
- все работает?
#9
Отправлено 13 Январь 2016 - 16:16
document.getElementById('main4310').value
выводит 0
Сообщение отредактировал master2015: 13 Январь 2016 - 16:21
#10
Отправлено 13 Январь 2016 - 16:30
Цитата
Если же не работает, то возможно событие onsubmit просто срабатывает уже после проверок, и соответственно ставить main = 1 уже бессмысленно в этот момент. Вообще, это событие предназначалось для отмены сохранения, а если вам нужно проставить обязательность, то это можно (и видимо нужно) сделать еще до сохранения, а конкретно сразу после изменения поля 1680. Т.е. функция должна стоять на событие onchange данного поля.
#11
Отправлено 13 Январь 2016 - 16:38
Цитата
Уточню, на всякий случай: имеется ввиду собственный алгоритм отмены. Т.е. например, в данном случае, вы вместо простановки обязательности можете вывести в onsubmit свое сообщение "заполните такое то поле", и затем вернуть false. В этом случае сохранение отменится. А простановка обязательности означает, что будет использоваться встроенный алгоритм проверки и соответственно отмены сохранения. А вы просто ставите метку на поле, что его нужно проверять. Поэтому эту метку нужно поставить заранее, а не по событию сохранения, которое будет запущено уже после всех штатных проверок.
#12
Отправлено 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
Отправлено 10 Февраль 2016 - 11:02
И этот код используется для поля, которое должно стать обязательным или для поля от значения которого зависит обязательность?
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
Отправлено 10 Февраль 2016 - 14:09
ber (10 Февраль 2016 - 11:02) писал:
А что может помешать, не совсем понял? Чем поля связи хуже других?
Цитата
Если под фразой "для поля" имеется ввиду в настройки какого именно поля вставляется, то в данном случае особо разницы нет, т.к. в коде используются явные id полей. Разница бывает только если используется шаблон {$one_field.id} в коде. Сама функция из кода настроена разумеется на событие изменения поля 1, т.к. именно от него зависит включение обязательности. Поэтому логичнее помещать код в его настройки, хотя как уже сказал это не играет особой роли, кроме как "быстро найти потом".
#15
Отправлено 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.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
Отправлено 10 Февраль 2016 - 15:13
#17
Отправлено 10 Февраль 2016 - 15:49
CbCoder (10 Февраль 2016 - 15:13) писал:
Действительно, испытал этот код на другом простом примере о текстовыми полями - 0 реакции.
Как правильно написать, что:
если поле связи 2031 не равно пусто, то поле связи 12730 обязательно к заполнению (иначе нельзя сохранить запись)
И еще в поле 2031 уже прописан код:
display_field({$one_field.id}, document.getElementById('value1831').value=="Да");
Эти два кода не должны мешать друг другу и работать параллельно.
Помогите, пожалуйста.
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
Отправлено 10 Февраль 2016 - 15:56
2. Они никак не должны помешать друг другу.
#19
Отправлено 10 Февраль 2016 - 16:33
CbCoder (10 Февраль 2016 - 15:56) писал:
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.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
Отправлено 10 Февраль 2016 - 16:41
Цитата
Если просмотрите тему по скрытию полей целиком, то найдете как обсуждение этого, так и решение. Если по сути, то через addHandler назначение событий действительно не происходит, но есть альтернативный вариант. Я потому и посоветовал смотреть тему ближе к концу для свежих примеров.
Количество пользователей, читающих эту тему: 8
0 пользователей, 8 гостей, 0 анонимных