Javascript 在不前进的情况下记录按键和响应时间
我对JavaScript非常陌生。我有一个Qualtrics调查,我试图创建一个问题,回答者必须先按下空格键,然后在屏幕上回答一个数学问题。我想让Qualtrics记录(1)他们是否按空格键(分数为“C”)或(分数为“X”),(2)如果按了,他们从页面出现时开始按空格键需要多长时间,以及(3)不在按键时进入下一个屏幕,因为他们仍然必须回答屏幕上的数学问题。以下是我一直在尝试的: 质量标准问题Q1的主体:Javascript 在不前进的情况下记录按键和响应时间,javascript,qualtrics,Javascript,Qualtrics,我对JavaScript非常陌生。我有一个Qualtrics调查,我试图创建一个问题,回答者必须先按下空格键,然后在屏幕上回答一个数学问题。我想让Qualtrics记录(1)他们是否按空格键(分数为“C”)或(分数为“X”),(2)如果按了,他们从页面出现时开始按空格键需要多长时间,以及(3)不在按键时进入下一个屏幕,因为他们仍然必须回答屏幕上的数学问题。以下是我一直在尝试的: 质量标准问题Q1的主体: Please press the spacebar, then solve this pro
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以及页面时间。您可以删除或注释掉该警报,因为它只是用于测试/调试目的。太棒了,这非常有效!谢谢你的代码和建议。没问题!谢谢我的第一个被接受的答案!