В SURVEYSTUDIO по умолчанию любой вопрос должен содержать ответ, иначе перейти к следующему вопросу не получится. Причём если вопрос табличный — требуется, чтобы ответ был в каждой видимой строке таблицы. Это удобно и позволяет разработчику не выполнять проверки вручную в каждом вопросе. Однако бывают случаи, когда стандартная валидация не подходит.
Длина текста
Допустим, у нас есть текстовый вопрос, и ответ должен быть не короче 3 символов. Для этого достаточно добавить скрипт после ответа:
if (Q.openValueTxt.length < 3) {
return error('Пожалуйста, дайте более развёрнутый ответ');
}
Проверка ввода числа
Ещё пример. Есть табличный числовой вопрос, и нужно во всех строках требовать число от 1 до 100. Самый простой способ это сделать — добавить действие после ответа Сообщить об ошибке с необходимыми условием и текстом сообщения:
О синтаксисе выражений почитать можно здесь.
Ошибка будет выводиться, если в любой строке введено неверное число, без уточнения в какой. Если мы хотим выводить код строки с ошибкой, то действия нужно добавлять для каждой строки отдельно, но если строк много, то проще — скриптом после ответа.
- Действия
- Скрипт
- Если
Q(row = 1 and (valueNum < 1 or valueNum > 100))
, то сообщить об ошибке "В строке 1 можно вводить только числа от 1 до 100" - Если
Q(row = 2 and (valueNum < 1 or valueNum > 100))
, то сообщить об ошибке "В строке 2 можно вводить только числа от 1 до 100" - Если
Q(row = 3 and (valueNum < 1 or valueNum > 100))
, то сообщить об ошибке "В строке 3 можно вводить только числа от 1 до 100"
И так далее.
for (let row of Q.rows.getVisible()) {
let num = row.answer.openValueNum;
if (num < 1 || num > 100) {
return error('В строке '+ row.code +' можно вводить только числа от 1 до 100');
}
}
Проверка корректности чисел из нескольких вопросов
Допустим, нужно проверить, что число в текущем числовом вопросе не больше числа, введённого в предыдущем вопросе. Это можно сделать только скриптом.
if (Q.openValueNum > Q1.openValueNum) {
return error('Введённое число не может быть больше числа из Q1');
}
Аналогично можно проверить число у варианта ответа, в строке таблицы или у варианта ответа в строке таблицы.
Выделение строки с ошибкой
Вместо вывода кода строки, скриптом можно выделять текст строки с ошибкой для наглядности. Например, есть табличный вопрос с выбором ответа, и нужно разрешить выбирать ответ 7 только в строках с кодами 1, 3 и 9:
let rCodes = [1, 3, 9];
for (let row of Q.rows.getVisible()) {
row.text = row.plainText;
if (row.isChecked(7) && !rCodes.includes(row.code)) {
row.text = '<font color="red"><b>'+ row.text +'</b></font>';
return error('В этой строке нельзя выбирать ответ 7');
}
}
Отключение проверки ответов
Иногда бывает нужно отключить стандартную проверку ответа — для этого в вопросе есть опция Проверка ответа скриптами. Включив её, можно будет не указывать никакого ответа в вопросе или ответить на него частично и перейти к следующему вопросу. Система будет контролировать только формат вводимых значений (например, что в числовом поле введено именно число, а не текст).
Если вы не планируете осуществлять какие-либо проверки и вам нужен либо полный ответ на вопрос, либо не нужен никакой — читайте эту статью.
И вот, допустим, требуется разрешить переход к следующему вопросу, если в табличном вопросе с выбором есть хотя бы один ответ (в любой строке). Включаем эту опцию и добавляем скрипт после ответа:
for (let row of Q.rows.getVisible()) {
if (row.getCheckedCodes().length > 0) return ok;
}
return error('Пожалуйста, выберите хотя бы 1 ответ');
Вопрос с отключённой проверкой ответа является для системы отвеченным, поэтому в скриптах свойство isAnswered для него всегда будет true
.