Qualtrics:使用 space 栏继续,如果在按下 space 栏之前未回答项目,则研究下一个项目的自动推进

Qualtrics: using space bar to continue, study autoadvancing on next item if item left unanswered before space bar press

我是 JavaScript 的新手,我目前正在尝试向我的 Qualtrics 调查添加自定义代码,以便按下 space 栏继续 "Text/Graphic"题型。我有一个应该可以工作的代码;但是,我收到 "Unexpected token (" 错误。

代码如下:

Qualtrics.SurveyEngine.addOnload(function()
{
document.addEventListener("keydown", function(e) {
    if (e.keyCode === 32) {

        function(){
            that.clickNextButton();
        }

}
}

});`

几年前我还找到了一个类似问题的答案:

这是一个有效的简化版本(已更新以隐藏 NextButton):

Qualtrics.SurveyEngine.addOnload(function()  {
$('NextButton').hide();         
document.on("keydown", function(e) {
     if (e.keyCode === 13) $('NextButton').click();
});
});

但是,此代码在我的调查中根本不起作用(就好像它根本不存在一样)。

非常感谢任何帮助,提前致谢!

____编辑_____

我现在使用的代码如下:

Qualtrics.SurveyEngine.addOnload(function()
{
    /*Place your JavaScript here to run when the page loads*/

});

Qualtrics.SurveyEngine.addOnReady(function()
{
    /*Place your JavaScript here to run when the page is fully displayed*/
Qualtrics.SurveyEngine.addOnReady(function() {
    $('NextButton').hide();
    document.on("keydown", function(e) {
        if (e.keyCode === 32) $('NextButton').click();
    });
});

});

Qualtrics.SurveyEngine.addOnUnload(function()
{
    /*Place your JavaScript here to run when the page is unloaded*/

});

我现在遇到的问题是,只要我在回答上一个问题之前按 space 栏,研究就会自动推进下一个问题。

例子
问题一:你刚才看到的这句话是不是前一句的合理延续?
* 参与者在回答问题前按 space 键,F 表示否,J 表示是
* 研究提醒参与者他们需要回答问题才能继续下一个问题
* 参与者回答了问题,研究自动进入下一个问题,因为回答验证了问题
--> 该研究只让参与者看到下一个项目一秒钟,然后在参与者不按任何键的情况下自动前进到下一个项目。

我用于 F + J 键的代码如下:

Qualtrics.SurveyEngine.addOnload(function()
    {

this.hideNextButton();
this.hidePreviousButton();
var that = this;
Event.observe(document, 'keydown', function keydownCallback(e) {
  var choiceID = null;
  switch (e.keyCode) {
    case 74: // 'f'  was pressed
      choiceID = 2;
      break;
    case 70: // 'j' was pressed
      choiceID = 1;
      break;
  }

  if (choiceID) {
    Event.stopObserving(document, 'keydown', keydownCallback);
    that.setChoiceValue(choiceID, true);
    that.clickNextButton();
    }   
    });
});

您需要删除 that.clicknextbutton() 周围的 function(),并将 that 更改为 thisthat 没有意义,除非它是设置为 this 关键字的变量。 function(){} 语法用于在参数中定义表达式。

Qualtrics.SurveyEngine.addOnload(function(){
    document.addEventListener("keydown", function(e) {
        if (e.keyCode === 32) {
                this.clickNextButton();    
        }
    });

});

我认为由于时间问题,它不起作用。改为使用 addOnReady:

Qualtrics.SurveyEngine.addOnReady(function() {
    $('NextButton').hide();
    document.on("keydown", function(e) {
        if (e.keyCode === 32) $('NextButton').click();
    });
});

注意:使用分屏预览模式,您必须先单击 window,否则它不会识别按键。

编辑:

我无法重现您的问题(当我尝试时,您的代码对我来说是有效的)。但是,请尝试以下操作。它更清洁和一致。如果有效,请务必接受答案。

Space 吧台问题:

Qualtrics.SurveyEngine.addOnReady(function() {
    $('NextButton').hide();
    if($('PreviousButton')) $('PreviousButton').hide();
    var evt = document.on('keydown', function(e) {
        if (e.which == 32) {  //space bar pressed
            evt.stop();
            $('NextButton').click();
        }   
    });
});

Yes/No 问题:

Qualtrics.SurveyEngine.addOnReady(function() {
    $('NextButton').hide();
    if($('PreviousButton')) $('PreviousButton').hide();
    var that = this;
    var evt = document.on('keydown', function(e) {
        var choiceID = null;
        if(e.which == 70) choiceID = 1;     //'f' was pressed
        else if(e.which == 74) choiceID = 2;    //'j' was pressed

        if (choiceID) {
            evt.stop();
            that.setChoiceValue(choiceID, true);
            $('NextButton').click();
        }   
    });
});