Javascript Qualtrics API函数不在EventListener中调用的自定义函数内工作
我在header部分定义了一个自定义函数,用于检查、提醒用户,并在特定滑块未通过某些限制时重置其值 在单击问题时调用此函数,效果非常好: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
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也是全局声明的(即仅在脚本标记中,而不是作为对象的一部分)。