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


Поля обязательные для заполнения - есть решение?

Обязательное для заполнения

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

#1 Виктор

    Участник

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

Отправлено 10 Ноябрь 2013 - 17:46

Добрый день, уважаемы пользователи форума!
Возможно, уже кто-то из вас сталкивался с подобной задачей и поможет решить ее мне,

Дано:
Три поля:
  • "Поле 1"
  • "Поле 2"
  • "Поле 3"
где:
"Поле 2" и "Поле 3" - обязательные для заполнения (настроено через редактирование поля)
"Поле 1" - выпадающий список с двумя значениями:
  • "Значение 1"
  • "Значение 2"
Задача:
Как отключить проверку на заполненность полей "Поле 2" и "Поле 3" при выбранном в "Поле 1" значении "Значение 2"?

Заранее спасибо за ответы и оказанную помощь!

#2 CbCoder

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

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

Отправлено 11 Ноябрь 2013 - 09:18

Обязательность, как опцию, вы никак не отключите таким образом. Вам придется отключить ее в настройках поля и проверять заполнение полей через javascript. Подробнее (по javascript в поле) ищите в документации и здесь на форуме.

#3 Виктор

    Участник

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

Отправлено 11 Ноябрь 2013 - 22:02

Просмотр сообщенияCbCoder (11 Ноябрь 2013 - 09:18) писал:

Обязательность, как опцию, вы никак не отключите таким образом. Вам придется отключить ее в настройках поля и проверять заполнение полей через javascript. Подробнее (по javascript в поле) ищите в документации и здесь на форуме.

Это не выход, слишком "кривое" решение получается:

function checkFields()
{
  if (document.getElementById('Поле 1').value == 'Значение 1' && document.getElementById('Поле 2').value == '')
	{
				  alert('Поле "Поле 2" не заполнено!');
				  return false;
	}
};
addHandler(document.getElementById("edit_form"), "onsubmit", checkFields);

Сразу возникает несколько вопросов:
  • Как пользователю показать, что поля обязательные для заполнения? Как сделать красную звездочку у проверяемого поля - *Поле 2?
  • Как помимо модального окна предупреждения, обозначить неправильно заполненное поле, т.е. форматировать его?
Вообщем как через JavaScript добиться того же, что достигается через принудительную проверку поля в его настройках?

#4 CbCoder

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

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

Отправлено 12 Ноябрь 2013 - 08:48

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

#5 andibrag

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

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

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

Какой тип у Поля_2 и Поля_3?

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

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

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


#6 Виктор

    Участник

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

Отправлено 12 Ноябрь 2013 - 18:10

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

Какой тип у Поля_2 и Поля_3?

Текст

#7 Виктор

    Участник

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

Отправлено 12 Ноябрь 2013 - 23:40

Задача решена.
Подключаем через JavaScript стандартную надстройку КБ по проверке заполненных полей, тем самым получив условно-обязательные поля:

function onchange_{$one_field.id}()
{
   id_lines = ['Поле_2', 'Поле_3'];
	for (i = 0; i < 2; i++) {
		if (document.getElementById('valueПоле_1').value == 'Значение_1') {
			$("#field_edit" + id_lines[i] + " b").first().before("<span style='color:red'>* </span");
			$("#main" + id_lines[i]).val(1);
		} else {
			$("#field_edit" + id_lines[i] + " span").remove();
			$("#main" + id_lines[i]).val(0);
		}
	}
}
$('#value{$one_field.id}').bind('change', onchange_{$one_field.id});
$(document).ready(function() {
  onchange_{$one_field.id}();
});

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

Сообщение отредактировал Виктор: 12 Ноябрь 2013 - 23:44


#8 OLDest

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

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

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

чуток доработал твой вариант.
function obz(keyfiledvalue,oldfiledvalue, obz1, obz2)
{
id_lines = [obz1, obz2];
if ((document.getElementById(keyfiledvalue).value != oldfiledvalue)&(oldfiledvalue!='')) {
    for (i = 0; i < 2; i++) { 
        $("#field_edit" + id_lines[i] + " span").remove();
        $("#main" + id_lines[i]).val(0);               
	    $("#field_edit" + id_lines[i] + " b").first().before("<span style='color:red'>* </span");
	    $("#main" + id_lines[i]).val(1);
  } 
} else {
    for (i = 0; i < 2; i++) { 
	    $("#field_edit" + id_lines[i] + " span").remove();
	    $("#main" + id_lines[i]).val(0);
	 }
  }  
}  


keyfiledvalue - ключевое поле, изменение которого отслеживаем (например 'value1331')
oldfiledvalue - предыдущее значение поля, получаем при загрузке документа например так
 var oldfiledvalue = document.getElementById('value1331').value;

obz1, obz2 - id полей которые надо сделать обязательными
Теперь если нужно отслеживать изменение нескольких полей, не проставляется ** и более
я использую примерно так:
function onchange_{1411}()
{
   display_fgroup(101, (document.getElementById('value1411').value!=datbornValue));
   obz('value1411',datbornValue,'1341','1351');
}
$('#value{1411}').bind('change', onchange_{1411});
addHandler(document.getElementById("value1411"), "onchange", onchange_{1411});

Купил лицензию КБ





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

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