在不前进的情况下记录按键和响应时间

Record keypress and response time without advancing

我是 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=?

JavaScript 与 Qualtrics 问题 Q1 相关联:

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 关联的响应文本框中的任何内容(用于响应数学问题),但不记录他们是否按下了空格键或他们按下该键的响应时间。任何帮助将不胜感激。谢谢

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

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

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 事件,如果它是 space,那么它设置一个等于 C 的变量,否则它设置它等于 X。然后它禁用 keydown 监听器,这样它就不会在之后触发每一次按键。

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