Шаблон. Скриптование вопросов
ВНИМАНИЕ! Использование скриптов может привести к “непроходимой анкете“. Тщательно тестируйте шаблоны перед отправкой в работу.
Введение
В систему встроена возможность управления поведением анкет с помощью JavaScript.
Скрипты позволяют динамически изменять текст вопросов, скрывать или показывать элементы, устанавливать ответы, валидировать ввод и управлять переходами внутри анкеты.
Назначение:
динамическое изменение текста и комментариев вопросов;
скрытие и отображение вопросов или вариантов ответов;
изменение порядка и структуры вопросов в секции или цикле;
установка и проверка ответов;
адаптация анкеты под ответы респондента.
Чтобы задать скрипт необходимо в конструкторе шаблонов в редактировании вопроса нажать соответствующую иконку:
К каждому вопросу можно указать JS-скрипты:
До показа: перед отображением вопроса пользователю (команды:
applyAnswer,skipQuestion)После ответа: анализ ответа и управление логикой (команды:
showError,finish)
Скрипт влияет только на вопрос, к которому привязан. Рекомендуется минимизировать количество скриптов в цепочке вопросов для снижения нагрузки.
Где исполняются скрипты
Код выполняется внутри контекста вопроса анкеты, до показа вопроса пользователю или после ответа на вопрос.
В момент выполнения доступны объекты:
question— текущий вопрос и его свойстваanswer— ответ на вопрос, если он уже естьhistory— массив кодов показанных пользователю вопросов["Q1","Q2","Q3","Q4","Q5","Q6","Q7","Q8","Q9","Q10"]
media— массив прикрепленных к вопросу медиа (изображения, видео, аудио)[{'name':'имя файла', ‘type': ‘Video’|'Image'|'Audio'}, …]
cycle— информация о цикле, если вопрос в цикле, иначе null{'index':1,'length':5,'option':'label', 'native': 4}
memory— объект для передачи данных между разными запусками скрипта внутри одного заполненияlocale— язык заполнения для мультиязычных анкетversion— строка с версией системы заполнения
Взаимодействие с заполнением
Скрипты не изменяют анкету напрямую.
Вместо этого все действия добавляются в специальную очередь команд commands.push,
которая выполняется после завершения скрипта.
🔹 Принцип работы
Скрипт выполняется
Каждая команда добавляется в очередь через
commands.pushПосле завершения скрипта система обрабатывает очередь и применяет все изменения.
🔹 Пример
Такой скрипт перед показом вопроса пользователю изменит текст вопроса и скроет три варианта ответа:
commands.push.setLabel("Выберите известные вам марки");
commands.push.hideOptions(['3','4','5']);Функции
makeSubstitution(message)— выполнить подстановки в текстеgetAnswer(questionCode)— получить объект ответа на вопрос по его кодуgetQuotas(questionCode)— получить значение квоты (только на МУ)getAppliedQuotas()— Получить в какие квоты заполняется анкетаgetLocales()— Доступные для заполнения язвки в шаблоне
Отладка
console.log— отладочные сообщения, будут выводится только в режиме тестирования шаблонаconsole.warn— отладочные сообщения, будут выводится только в режиме тестирования шаблонаconsole.error— сообщения об ошибках будут показаны при любом заполнении
Типы вопросов
От типа вопроса зависят доступные свойства и команды, а так же тип ответа.
Список команд
Команда | Типы вопросов |
|---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|