代码之家  ›  专栏  ›  技术社区  ›  Heidi Merine Aro

质量:使用空格键继续,如果在按下空格键之前项目没有回答,则研究下一个项目的自动推进

  •  0
  • Heidi Merine Aro  · 技术社区  · 7 年前

    我对JavaScript非常陌生,目前我正在尝试向我的Qualtrics调查中添加一个自定义代码,这样就可以按空格键继续“文本/图形”问题类型的调查。我有一个应该有效的代码;然而,我得到了一个“意外的令牌”(“错误”)。

    代码如下:

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

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

    以下是一个简化版本(更新为隐藏下一个按钮):

    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 回复  |  直到 7 年前
        1
  •  1
  •   T. Gibbons    7 年前

    我认为由于时间问题,它不起作用。改用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();
            }   
        });
    });
    
        2
  •  0
  •   grt812    7 年前

    您需要删除 function() that.clicknextbutton() ,和更改 that this . 那个 除非它是设置为 关键字。这个 function(){} 语法用于定义参数中的表达式。

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