Достаточно часто встречаются анкеты, логику работы которых невозможно реализовать простыми средствами, такими как действия или условия показа вопросов. Для этого в SURVEYSTUDIO есть поддержка скриптов на языке JavaScript, с помощью которых можно реализовать логику работы анкеты практически любой сложности. Более того, скриптами можно полностью создать анкету (вопросы и варианты ответов), не используя редактор вопросов анкеты.
Каждый скрипт представляет собой функцию, которая получает в качестве параметра вопрос, производит некую обработку и возвращает результат. Существуют глобальные для анкеты скрипты, в которые вопрос в качестве параметра не передается. Таким образом, используя синтаксис JavaScript, любой написаный в SURVEYSTUDIO скрипт в итоге выглядит примерно так:
function Q1_BeforeShow(Q) { return skip; }
При этом в SURVEYSTUDIO не нужно описывать саму функцию для скрипта - это выполняется системой,
т.е. в этом примере только строка return skip;
должна быть написана в окне редактирования скрипта.
В анкете есть глобальные скрипты, не связанные с каким-то конкретным вопросом, а также скрипты для вопросов. Редактор глобальных скриптов можно открыть, выбрав необходимый пункт в меню в верхней правой части редактора вопросов анкеты:
Глобальные скрипты перед показом и после ответа выполняются перед такими же скриптами, указанными непосредственно в самом вопросе. В свойствах вопроса для редактирования скриптов используется кнопка:
Скрипты перед показом и после ответа аналогичны соответствующим глобальным скриптам, только выполняются для вопроса, в котором они написаны. Скрипт Во время показа выполняется во время показа вопроса, в браузере, а не на сервере, и не имеет доступа к вопросам и API системы.
Любой скрипт должен вернуть в качестве результата специальное значение. Предусмотрен набор вспомогательных функций и глобальных переменных, которые помогают сформировать результат в необходимом формате:
return ok;
Возврат значения ok является обычным для любого скрипта и не подразумевает выполнение системой каких-то дополнительных действий. То же самое произойдет, если скрипт не вернет вообще никакого значения.
return skip;
Возврат значения skip используется в скриптах перед показом вопроса и заставляет систему сбросить состояние текущего вопроса (аналогично reset()) и перейти к следующему по порядку.
return answered;
Возврат значения answered так же используется в скриптах перед показом вопроса и помечает вопрос как отвеченный, без вывода на экран. Т.е. ответ на него должен быть сделан так же скриптом. Система проверит правильность ответа, так же как это происходит в обычном случае. Если ответ не пройдет проверку - вопрос будет показан с сообщением об ошибке. Если вопрос окажется без ответа - он будет выведен на экран.
return error('Текст сообщения об ошибке');
Такой метод возврата результата используется в скриптах после ответа, когда необходимо показать вопрос заново с сообщением об ошибке.
Если в функцию error()
не передано сообщение, которое необходимо показать - будет показано стандартное.
return question(123);
Возврат номера вопроса, на который необходимо совершить переход. Может использоваться как в скриптах перед показом (в этом случае текущий вопрос будет пропущен со сбросом состояния как при возврате skip), так и после ответа на вопрос.
return exit('Текст прощального сообщения');
Принудительное завершение интервью. Если в функцию exit()
не передано сообщение, которое необходимо показать - будет показано стандартное.
return exitAndRedirect('Текст прощального сообщения', 'http://www.rbc.ru/');
Также выполняется завершение интервью, но после его сохранения производится переход на указанный вторым параметром адрес.
return exitAndRestart('Текст прощального сообщения');
(пока не реализовано)
Выполняется завершение интервью, после чего производится повторный запуск для ввода следующего интервью в этот же проект.
Читайте далее: глобальные объекты, функции и переменные.