Javascript Qualtrics API函数不在EventListener中调用的自定义函数内工作

Javascript Qualtrics API函数不在EventListener中调用的自定义函数内工作,javascript,dom-events,qualtrics,onblur,Javascript,Dom Events,Qualtrics,Onblur,我在header部分定义了一个自定义函数,用于检查、提醒用户,并在特定滑块未通过某些限制时重置其值 在单击问题时调用此函数,效果非常好: this.questionclick = chkVals; 我还想在用户退出文本输入字段时运行该函数(因为有些用户正在使用键盘进行调查)。我为每个滑块的文本输入字段实现了一个事件监听器,当焦点超出文本输入字段时,该监听器将运行该函数 // choices is an array of choice ids for (i = 0; i < ch

我在header部分定义了一个自定义函数,用于检查、提醒用户,并在特定滑块未通过某些限制时重置其值

在单击问题时调用此函数,效果非常好:

  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);
  };
//choices是choice id的数组
对于(i=0;i
我知道事件监听器可以工作,因为正确的警报正在弹出。它只是无法将值重置为
此值。setChoiceValue
不是环境中的函数。我尝试设置
var=this
并在函数中调用.setChoiceValue
,但它仍然不起作用


任何帮助都将不胜感激

您还没有显示所有代码,所以我正在做一些假设

这是addOnload函数中的Qualtrics问题对象。由于chkVals不在addOnload函数的范围内,
这个
(或者
那个
)是未定义的。因此,您需要在函数调用中传递它(
function chkVals(qobj)
),然后在chkVals函数中使用
qobj.setChoiceValue
。然后您的函数调用变成:

this.questionClick = chkVals(this);


您还没有显示所有代码,所以我正在做一些假设

这是addOnload函数中的Qualtrics问题对象。由于chkVals不在addOnload函数的范围内,
这个
(或者
那个
)是未定义的。因此,您需要在函数调用中传递它(
function chkVals(qobj)
),然后在chkVals函数中使用
qobj.setChoiceValue
。然后您的函数调用变成:

this.questionClick = chkVals(this);


@吉本斯的回答帮助我达到了这一点。根据建议,我需要向
chkVals()
添加一个参数,以便能够引用
对象。但是,

this.questionClick = chkVals(this);
由于
是保留对象,因此无法运行整个头脚本。最后,我在自定义函数中将
this
的所有引用更改为
that
,并按照建议添加参数
that

function chkVals(that) {
...
... that.setChoiceValue(x, y)
}
要使用参数调用函数,我必须显式定义一个匿名函数,该函数调用
chkVals
,否则它将无法工作(我不确定原因):

var=this;
this.questionclick=function(){chkVals(that);}
对于(i=0;i

以上工作

@T.吉本斯的回答帮助我达到了这一点。根据建议,我需要向
chkVals()
添加一个参数,以便能够引用
对象。但是,

this.questionClick = chkVals(this);
由于
是保留对象,因此无法运行整个头脚本。最后,我在自定义函数中将
this
的所有引用更改为
that
,并按照建议添加参数
that

function chkVals(that) {
...
... that.setChoiceValue(x, y)
}
要使用参数调用函数,我必须显式定义一个匿名函数,该函数调用
chkVals
,否则它将无法工作(我不确定原因):

var=this;
this.questionclick=function(){chkVals(that);}
对于(i=0;i

以上工作

chkVals函数是否全局声明?(即,就在标记内?)那么,如果只使用window.setChoiceValue而不是this.setChoiceValue,就可以了。假设setChoiceValue也是全局声明的(即仅在脚本标记中,而不是作为对象的一部分)。chkVals函数是否全局声明?(即,就在标记内?)那么,如果只使用window.setChoiceValue而不是this.setChoiceValue,就可以了。假设setChoiceValue也是全局声明的(即仅在脚本标记中,而不是作为对象的一部分)。