Одинаковый набор вопросов неудобен для разных услуг: сайту нужно число страниц, рекламе — страна, интеграции — источник и получатель данных. Демонстрация меняет вопросы по типу задачи и показывает подготовленную структуру без настоящей отправки.
УЧЕБНЫЙ ПРИМЕР
Форма, которая уточняет задачу
Выберите сайт, рекламу или интеграцию — форма покажет нужные уточнения. Заполненные поля проверяются и собираются в JSON прямо на странице.
Это ширина демонстрационного холста. Она не заменяет проверку настоящего устройства.
DEMO / form-rules
Форма, которая уточняет задачу
Одинаковый набор вопросов неудобен для разных услуг: сайту нужно число страниц, рекламе — страна, интеграции — источник и получатель данных. Демонстрация меняет вопросы по типу задачи и показывает подготовленную структуру без настоящей отправки.
Открыть рабочую демонстрацию
Форма, которая уточняет задачу
Уточняет сведения под выбранную услугу, не перегружая человека вопросами других направлений.
Посмотреть рабочий код
function buildConditionalRequest(type, values) {
if (!['site', 'ads', 'integration'].includes(type)) throw new Error('RULES_TYPE');
if (values === null || typeof values !== 'object' || Array.isArray(values) ||
Object.getPrototypeOf(values) !== Object.prototype) throw new Error('RULES_VALUES');
const company = values.company === undefined ? '' : values.company;
if (typeof company !== 'string' || company.trim().length > 100) throw new Error('RULES_COMPANY');
if (typeof values.task !== 'string' || values.task.trim().length < 10 ||
values.task.trim().length > 1500) throw new Error('RULES_TASK');
let details;
if (type === 'site') {
if (!['string', 'number'].includes(typeof values.pages)) throw new Error('RULES_PAGES');
const pages = Number(values.pages);
if (!Number.isInteger(pages) || pages < 1 || pages > 100) throw new Error('RULES_PAGES');
details = {pages};
} else if (type === 'ads') {
if (typeof values.country !== 'string' || !values.country.trim() ||
values.country.trim().length > 100) throw new Error('RULES_COUNTRY');
details = {country: values.country.trim()};
} else {
if (typeof values.source !== 'string' || !values.source.trim() ||
values.source.trim().length > 100) throw new Error('RULES_SOURCE');
if (typeof values.target !== 'string' || !values.target.trim() ||
values.target.trim().length > 100) throw new Error('RULES_TARGET');
details = {source: values.source.trim(), target: values.target.trim()};
}
return {type, company: company.trim(), task: values.task.trim(), details};
}Локальная демонстрация: сервер, сохранение и настоящая отправка не подключены.
Три типа запроса с соответствующими уточняющими полями.
Переключить все типы, проверить обязательные уточнения, границы числа страниц и длину описания, затем сверить поля результата.
Задача в этом сценарии
Одинаковый набор вопросов неудобен для разных услуг: сайту нужно число страниц, рекламе — страна, интеграции — источник и получатель данных. Демонстрация меняет вопросы по типу задачи и показывает подготовленную структуру без настоящей отправки.
Как устроено решение
- Оставляем общее описание задачи обязательным, а название компании — необязательным. Тип запроса определяет, какие уточняющие поля показываются.
- Для сайта нужно целое число страниц от одного до ста, для рекламы обязательно указать страну, для интеграции — источник и получатель. Описание задачи должно содержать от десяти до полутора тысяч символов.
- Проверяем заполнение и собираем JSON с общими сведениями и полями выбранного типа. Скрытые уточнения других типов в результат не включаем; сеть и канал доставки не подключены.
Промежуточные материалы
- Исходная задача и ограничения → Одинаковый набор вопросов неудобен для разных услуг: сайту нужно число страниц, рекламе — страна, интеграции — источник и получатель данных. Демонстрация меняет вопросы по типу задачи и показывает подготовленную структуру без настоящей отправки.
- Состав решения → Три типа запроса с соответствующими уточняющими полями.
- Проверка перед запуском → Переключить все типы, проверить обязательные уточнения, границы числа страниц и длину описания, затем сверить поля результата.
Что проверить перед запуском
- Переключить все типы, проверить обязательные уточнения, границы числа страниц и длину описания, затем сверить поля результата.
- Для настоящей формы согласовать состав заявки и получателя; отдельно реализовать серверную проверку, сохранение и доставку.
Что входит в пример
- Три типа запроса с соответствующими уточняющими полями.
- Проверка обязательных значений, описания задачи и числа страниц.
- Подготовленный JSON для просмотра без реальной отправки.
Технический паспорт
DevPilot 1.5.2 · Охват проверок, исходники и дата свидетельств
- Статус
- DEMO · Вымышленная компания и учебные данные
- Материалы
- Собственные HTML/CSS/SVG, исходники и локальные алгоритмы. Фотографии клиентов не используются.
- Обработка
- Демонстрация выполняется в браузере. Открытие примера не создаёт заявку или оплаченный проект.
- Доказательства
- Содержимое и локальные проверки отделены от реальной браузерной, хостинговой и коммерческой приёмки.