В большинстве анкет требуется автоматически проставлять ответы по заданным условиям. Как минимум, обычно нужно относить респондента к какой-либо возрастной категории или выбирать видимый ответ и не показывать вопрос. Конечно, делать это можно и вручную, но зачем, если есть бездушный робот?
Кодирование возраста
Если в анкете есть вопрос про возраст респондента (например, числовой Q1
) и требуется определить возрастной интервал, то добавьте ещё один вопрос, с единственный выбором и списком интервалов в ответах. Затем вставьте в него скрипт перед показом, скорректировав для вашей задачи:
let age = Q1.openValueInt;
Q[1].checked = age <= 17;
Q[2].checked = age >= 18 && age <= 24;
Q[3].checked = age >= 25 && age <= 34;
Q[4].checked = age >= 35 && age <= 44;
Q[5].checked = age >= 45 && age <= 54;
Q[6].checked = age >= 55;
return answered;
Интервалы в вариантах ответа должны совпадать с интервалами в скрипте, в том числе их количество, иначе может получиться путаница в массиве.
Выбор видимого ответа
При показе ранее выбранных ответов бывает нужно автоматически выбирать один ответ, который отображается.
Пример.
Q1. Какие магазины Вы знаете?
НЕСКОЛЬКО ОТВЕТОВ.1. Магазин 1
2. Магазин 2
3. Магазин 3
97. Никакие [ИСКЛЮЧАЮЩИЙ]
Q2. В каком покупаете чаще?
ОДИН ОТВЕТ. ПОКАЗАТЬ ВЫБРАННОЕ В Q1. ОТМЕТИТЬ САМОСТОЯТЕЛЬНО, ЕСЛИ ЗНАЕТ ОДИН МАГАЗИН.1. Магазин 1
2. Магазин 2
3. Магазин 3
99. Затрудняюсь ответить [ВСЕГДА ОТОБРАЖАЕТСЯ]
Это можно сделать как действием, так и скриптом перед показом:
- Действия
- Скрипт
- Показать только варианты ответа, отмеченные в вопросе Q1
- Выбрать первый по порядку ответ, если видно 2 ответ(а/ов), и пометить как отвеченный
- Пропустить, если видно 1 вариантов ответа или строк
Q.answers.showOnly(Q1.getCheckedCodes());
if (Q.answers.visibleCount == 2) {
Q.answers.getVisible()[0].checked = true;
return answered;
}
return Q.answers.visibleCount > 1 ? ok : skip;
Здесь важно учесть 2 момента:
- Количество ответов, которые отображаются всегда. Прибавьте к нему 1 и пропишите итоговую сумму в действии/скрипте.
- Если включена ротация или рандомизация ответов, то у ответов вроде Не знаю должен стоять флаг Не подлежит рандомизации / ротации. Смысл в том, чтобы такой ответ не оказался в начале списка, иначе он может быть выбран.
Выбор ответа, если выбран какой-то другой ответ
Например, есть задача: автоматически выбрать ответ 3 и не задавать вопрос, если в Q1 выбран ответ 2 и одновременно в Q2 — 99. Это делается таким скриптом перед показом:
if (calc('Q1 = 2 and Q2 = 99')) {
Q[3].checked = true;
return answered;
}