0

我对 JavaScript 很陌生。我有一个 Qualtrics 调查,我正在尝试创建一个问题,受访者必须首先按空格键,然后回答屏幕上的数学问题。我想要的是让 Qualtrics 记录(1)他们是否按下空格键(得分为“C”)或不按下空格键(得分为“X”),(2)如果他们这样做,他们从按下空格键花了多长时间当页面出现时,以及(3)不要在按键上前进到下一个屏幕,因为他们仍然必须回答屏幕上的数学问题。这是我一直在尝试的:

Qualtrics 问题 Q1 的正文:

Please press the spacebar, then solve this problem: 1+12+15-13-3+19-9=?

与 Qualtrics 问题 Q1 相关的 JavaScript:

Qualtrics.SurveyEngine.addOnload(function()
{   
    var day = new Date();
    trialstart = day.getTime();

    $(document).on('keydown', function(e) {
        if(e.keyCode === 32) {
            var day = new Date();
            trialend = day.getTime();
            rt = trialend - trialstart;
            document.getElementById("Q1").value = document.getElementById("Q1").value + "C" + rt + ",";
        }
        else{
            document.getElementById("Q1").value = document.getElementById("Q1").value + "X" + ",";
        }
    });
});

现在,这个脚本什么也没做。Qualtrics 输出在与 Q1 关联的响应文本框中输入的任何内容(用于响应数学问题),但不记录他们是否按下了空格键或按下该键的响应时间。任何帮助将不胜感激。谢谢。

4

1 回答 1

0

您可能看不到任何输出,因为您使用“Q1”作为 ID。Qualtrics 元素 ID 实际上与此有点不同,因此找到它们的最佳方法是预览您的调查并使用浏览器检查它们以找到正确的 ID。

现在要获得更完整的答案,您的 Javascript 无法取消绑定按键事件。所以它总是以 X 而不是 C 结尾,除非他们以空格结束他们的文本输入。而是尝试这样的事情:

Qualtrics.SurveyEngine.addOnload(function(){
    var pageStart = new Date();
    var trialstart = pageStart.getTime();
    var that = this;
    that.hideNextButton();
    var para = document.createElement("footnote");
    var test = document.getElementById("Buttons");
    var node = document.createElement('input');
    var next = document.getElementById("NextButton");
    var rt;
    node.id = "newButton";
    node.type = "button";
    node.name = "newButton";
    node.value = "  Continue  ";
    var fired = 0;
    var spaceFirst = '';

    $(document).on('keydown', function(e) {
        if(fired != 1){
            if(e.keyCode === 32) {
                var day = new Date();
                var trialend = day.getTime();
                rt = trialend - trialstart;
                spaceFirst = 'C';
                fired = 1;
            }
            else{
                spaceFirst = 'X';
                fired = 1;
            }
        }else{}
    });

    node.onclick = function stuff(){
        if(spaceFirst == 'C'){
            document.getElementById("QR~QID1").value = document.getElementById("QR~QID1").value + ', ' + spaceFirst + ", " + rt;
        }else if(spaceFirst == 'X'){
            document.getElementById("QR~QID1").value = document.getElementById("QR~QID1").value + ', ' + spaceFirst;
        }else{}
        window.alert(document.getElementById("QR~QID1").value);
        that.clickNextButton();
    };
    para.appendChild(node);
    test.insertBefore(para, next);

});

这样做是从视图中隐藏下一个按钮并在其位置创建一个新按钮。(您需要设置此按钮的样式,id = "newButton",以匹配您当前的按钮)。然后它侦听第一个 keydown 事件,如果它是一个空格,那么它设置一个等于 C 的变量,否则它设置它等于 X。然后它禁用 keydown 侦听器,以便它不会在每次按键后触发。

当按下新按钮时,它会添加适当的 X 或 C 以及页面时间。您可以删除或注释掉警报,因为它仅用于测试/调试目的。

于 2015-01-20T23:55:04.210 回答