我编写了以下 JavaScript 代码来计算在 Qualtrics 调查中问题中选择 0、5 或 10 的次数。我将这段代码放在每个问题中:
Qualtrics.SurveyEngine.addOnload(function() {
var isCorrect10 = 10;
var currentCounter10 = Qualtrics.SurveyEngine.getEmbeddedData("Counter10");
if (!currentCounter10) {
currentCounter10 = 0;
}
var isCorrect0 = 0;
var currentCounter0 = Qualtrics.SurveyEngine.getEmbeddedData("Counter0");
if (!currentCounter0) {
currentCounter0 = 0;
}
var isCorrect5 = 5;
var currentCounter5 = Qualtrics.SurveyEngine.getEmbeddedData("Counter5");
if (!currentCounter5) {
currentCounter5 = 5;
}
// If it's selected, increment
if (isCorrect10) {
currentCounter10++;
Qualtrics.SurveyEngine.setEmbeddedData("Counter10",currentCounter10.toString());
}
if (isCorrect0) {
currentCounter0++;
Qualtrics.SurveyEngine.setEmbeddedData("Counter0",currentCounter0.toString());
}
if (isCorrect5) {
currentCounter5++;
Qualtrics.SurveyEngine.setEmbeddedData("Counter5",currentCounter5.toString());
}
});
为此,我将 Counter0、Counter5 和 Counter10 的嵌入数据初始化为 0。
这非常适合只有一个滑块的问题。但是,我希望这适用于有多个问题的矩阵问题。我想计算矩阵每个滑块中出现的计数,并且也与非矩阵问题兼容。因此,每个计数 (0,5,10) 应该是所有问题中所有选择的总和。我怎样才能相应地修改javascript?
编辑:
我原以为上面的代码可以工作,但它似乎甚至不足以解决单个滑块问题。相反,它只是在每个滑块的计数器中记录 1 个值,而不管相关值是否存在。
那么,我如何制作一个计数器来记录整个调查中所有滑块中每个相关值的存在情况?
我注意到上面的代码有几个问题:
首先,
if (!currentCounter5) {
语句可能会导致无意的问题。
在 Javascript 中,以下所有内容都将被评估为假:null
、undefined
AND 0
。如果 currentCounter5
0,那么它将被视为未定义(我认为这是不正确的行为)。
解决这个问题的方法是使用 if (isNaN(currentCounter5)) {
其次,语句
if (isCorrect10) {
将始终为真,因为isCorrect10
设置为10,然后没有更改。同样,isCorrect0
设置为0,这意味着该代码块永远不会运行(记住,因为0在Javascript中被视为假)。我会将这些更改为 if (isCorrect0 !== 0) {
行中的内容 - 但是,由于您没有重新分配这些变量,所以我无法完全理解这些 if 块的用途。
我还建议解析嵌入数据的响应,以确保您获得整数(而不是其他任何东西,例如字符串)。 您可以通过将调用包装在
parseInt
: 中来完成此操作
var currentCounter10 = parseInt(Qualtrics.SurveyEngine.getEmbeddedData("Counter10"), 10);