首页 > 解决方案 > Qualtrics API 函数在 EventListener 中调用的自定义函数中不起作用

问题描述

我在标题部分定义了一个自定义函数,该函数检查、提醒用户并在特定滑动条未通过某些限制时重置它的值。

当点击问题时,这个函数可以很好地工作:

  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,但它仍然不起作用。

任何帮助将不胜感激!

标签: javascriptdom-eventsqualtricsonblur

解决方案


@T。Gibbons 的回答帮助我达到了这一点。正如建议的那样,我需要添加一个参数chkVals()才能引用该this对象。然而,

this.questionClick = chkVals(this);

由于是保留对象而不起作用this,因此整个头脚本将不会运行。我最终在我的自定义函数中更改了对thisto的所有引用,并按照建议添加了参数:thatthat

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);

  };

以上有效!


推荐阅读