Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在不前进的情况下记录按键和响应时间_Javascript_Qualtrics - Fatal编程技术网

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

Javascript 在不前进的情况下记录按键和响应时间,javascript,qualtrics,Javascript,Qualtrics,我对JavaScript非常陌生。我有一个Qualtrics调查,我试图创建一个问题,回答者必须先按下空格键,然后在屏幕上回答一个数学问题。我想让Qualtrics记录(1)他们是否按空格键(分数为“C”)或(分数为“X”),(2)如果按了,他们从页面出现时开始按空格键需要多长时间,以及(3)不在按键时进入下一个屏幕,因为他们仍然必须回答屏幕上的数学问题。以下是我一直在尝试的: 质量标准问题Q1的主体: Please press the spacebar, then solve this pro

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

质量标准问题Q1的主体:

Please press the spacebar, then solve this problem: 1+12+15-13-3+19-9=?
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相关的JavaScript:

Please press the spacebar, then solve this problem: 1+12+15-13-3+19-9=?
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无法解除keypress事件的绑定。所以它总是以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以及页面时间。您可以删除或注释掉该警报,因为它只是用于测试/调试目的。

太棒了,这非常有效!谢谢你的代码和建议。没问题!谢谢我的第一个被接受的答案!