Функции API Qualtrics не работают в пользовательской функции, вызываемой в EventListener - PullRequest
0 голосов
/ 19 сентября 2018

Я определил пользовательскую функцию в разделе заголовка, которая проверяет, предупреждает пользователя и сбрасывает значение определенной ползунка, когда она не соответствует определенным ограничениям.

Эта функция прекрасно работает, когда вызывается при щелчках по вопросу:

  this.questionclick = chkVals;

Я также хотел бы запустить функцию, когда пользователь покидает поле ввода текста (так как некоторые пользователи используют клавиатуру для проведения опроса).Я реализовал прослушиватель событий для поля ввода текста каждого ползунка, которое запускает функцию, когда фокус находится вне поля ввода текста.

// choices is an array of choice ids 
  for (i = 0; i < choices.length; i++) {
    var x = document.getElementById(choices[i]);
    x.addEventListener("blur", chkVals, true);
  };

Я знаю, что прослушиватель событий работает, потому что появляются правильные оповещениявверх.Он просто не может сбросить значения, так как this.setChoiceValue не является функцией в среде.Я попытался установить var that = this; и вызвать that.setChoiceValue в функции, но она все еще не работает.

Любая помощь будет принята с благодарностью!Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

@ T.Ответ Гиббона помог мне добраться до этой точки.Как и предполагалось, мне нужно было добавить параметр к chkVals(), чтобы иметь возможность ссылаться на объект this.Однако

this.questionClick = chkVals(this);

не работает из-за того, что this является зарезервированным объектом, поэтому весь скрипт заголовка не будет запущен.Я закончил тем, что изменил все ссылки this на that в своей пользовательской функции и добавил параметр that, как было предложено:

function chkVals(that) {
...
... that.setChoiceValue(x, y)
}

Чтобы вызвать функцию с параметром, мне пришлось явно определитьанонимная функция, которая вызвала chkVals, иначе она не будет работать (я не знаю почему):

  var that = this; 

  this.questionclick = function() {chkVals(that);}

  for (i = 0; i < choices.length; i++) {
  var x = document.getElementById(choices[i]);
  x.addEventListener("blur", function() {chkVals(that);}, true);

  };

Выше работает!

0 голосов
/ 19 сентября 2018

Вы не показали весь свой код, поэтому я делаю некоторые предположения.

this - это объект вопроса Qualtrics в функции addOnload.Поскольку chkVals находится за пределами функции addOnload, this (или that) не определено.Итак, вам нужно передать его в вызове функции (function chkVals(qobj)), а затем использовать qobj.setChoiceValue в функции chkVals.Тогда ваши вызовы функций станут:

this.questionClick = chkVals(this);

и

x.addEventListener("blur", chkVals(this), true);
...