记录按键和响应时间而无需前进

时间:2015-01-20 18:03:47

标签: javascript qualtrics

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

1 个答案:

答案 0 :(得分: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以及页面时间。您可以删除或注释掉警报,因为它仅用于测试/调试目的。