Qualtrics:使用空格键继续,如果在空格键按下

时间:2017-10-07 15:21:17

标签: javascript keycode qualtrics

我对JavaScript很陌生,而且我目前正在尝试在我的Qualtrics调查中添加一个自定义代码,这使得按键空格键继续调查“文本/图形”问题类型。我有一个应该正常工作的代码;但是,我收到了一个“意外的令牌(”错误。

以下是代码:

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*/

});

我现在遇到的问题是,每当我按下前一个问题之前按空格键,研究就会自动进行下一个问题。

示例
问题1:您刚看到的句子是否是前一句的合理延续?  *参与者在回答问题之前按空格键,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();
    }   
    });
});

2 个答案:

答案 0 :(得分:1)

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

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

注意:使用分屏预览模式,您必须先在窗口中单击,否则它将无法识别按键。

修改

我无法重新创建您的问题(当我尝试时,您的代码就像我一样工作)。但是,请尝试以下操作。它更清洁,更一致。如果有效,一定要接受答案。

空格键问题:

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();
        }   
    });
});

是/否问题:

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();
        }   
    });
});

答案 1 :(得分:0)

您需要删除function()周围的that.clicknextbutton(),并将that更改为this。除非that是设置为this关键字的变量,否则function(){}没有任何意义。 Qualtrics.SurveyEngine.addOnload(function(){ document.addEventListener("keydown", function(e) { if (e.keyCode === 32) { this.clickNextButton(); } }); }); 语法用于在参数中定义表达式。

public static void main(String[] args) {
    DragonEscape game = new DragonEscape();
    frame.setTitle(title);
    frame.setSize(1000, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.add(new Graphicsa());
    frame.add(game);
}