Перейти к основному содержимому

Ручной контроль правильности ответа на вопрос

· 4 мин. чтения

В 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"

И так далее.

Проверка корректности чисел из нескольких вопросов

Допустим, нужно проверить, что число в текущем числовом вопросе не больше числа, введённого в предыдущем вопросе. Это можно сделать только скриптом.

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.