2017-10-07 5 views
0

Je suis très nouveau sur JavaScript et j'essaie actuellement d'ajouter un code personnalisé à mon enquête Qualtrics qui le rend donc en appuyant sur la barre d'espace continue l'enquête dans le type de question "Texte/Graphique". J'ai un code qui devrait fonctionner; cependant, je reçois un « jeton inattendu (» erreurQualtrics: utiliser la barre d'espace pour continuer, étudier l'autoadvancement sur l'élément suivant si l'élément laissé sans réponse avant la barre d'espace appuyez sur

Voici le code:.

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

     function(){ 
      that.clickNextButton(); 
     } 

} 
} 

});` 

J'ai aussi trouvé cette réponse à une question similaire de quelques années:

Voici une version simplifiée qui fonctionne (mise à jour pour cacher nextButton).

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

Ce code, cependant, ne fonctionne pas du tout dans mon enquête (comme si elle était même pas là)

Toute aide est très appréciée, merci d'avance!

____ Modifier _____

Le code que je suis maintenant utilisé est le suivant:

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

}); 

Le problème que j'ai maintenant que l'étude autoadvances la question suivante chaque fois que je la barre d'espace avant ansewring une question précédente .

Exemple
Question 1: Est-ce la phrase que vous venez de voir une suite logique de la phrase précédente?
* participant appuie sur la barre d'espace avant de répondre à la question avec F pour non et J pour oui
* L'étude rappelle le participant dont ils ont besoin pour répondre à la question avant de passer à la question suivante
* participant répond à la question et l'étude passe automatiquement à la question suivante, car la réponse valide la question
-> l'étude permet uniquement au participant de voir l'élément suivant pendant une seconde, puis de passer automatiquement à l'élément suivant sans que le participant n'appuie sur une touche.

Le code que j'utilise pour les touches F + J est la suivante:

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

Répondre

1

Je pense que cela ne fonctionne pas en raison d'un problème de synchronisation. Utilisez addOnReady à la place:

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

Note: avec le mode de prévisualisation écran partagé, vous devez cliquer dans la fenêtre du premier ou il ne reconnaîtra pas appuyer sur la touche.

EDIT:

Je ne pouvais pas recréer votre problème (votre code est travaillé comme pour moi quand je l'ai essayé). Cependant, essayez ce qui suit. C'est plus propre et cohérent. Si cela fonctionne, assurez-vous d'accepter la réponse.

barre d'espace question:

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

question Oui/Non:

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

Merci beaucoup pour votre aide. Cela fonctionne maintenant mais j'ai toujours un léger problème. J'ai des items dans mon étude dans lesquels le participant doit répondre à une question oui-non avec des traits de touches, à savoir F pour non et J pour oui. J'ai ajouté le code pour la suite par barre d'espace au début de l'étude, sur la toute première page, et ça marche bien sur l'ensemble de l'étude sauf pour ces questions oui-non. Je ne veux pas que les participants puissent continuer l'enquête avant de répondre à la question, et donc l'enquête montre une réponse "s'il vous plaît répondez à cette question d'abord" -message s'ils pressent la barre d'espace avant ... –

+0

... répondre à la question . Cependant, une fois que j'ai appuyé sur la barre d'espace pour continuer l'étude et que je suis "forcé" de répondre à la question en appuyant sur F ou J, l'étude corrige la question suivante! Je pense que ça doit être l'enregistrement de la barre d'espace avant de répondre à la question, et c'est comme si j'avais pressé "continuer" sur le prochain élément. Comment pourrais-je résoudre ce problème? Mon code pour les touches F/J: –

+0

{ this.hideNextButton(); this.hidePreviousButton(); var that = this; Event.observe (document 'keydown', function keydownCallback (e) {var choiceID = null; commutateur (e.keyCode) { cas 74: // 'f' a été pressé choiceID = 2; pause; cas 70: // 'j' a été pressé choiceID = 1; break;} si (choiceID) { Event.stopObserving (document, 'KEYDOWN', keydownCallback); that.setChoiceValue (choiceID, vrai) that.clickNextButton(); \t} \t \t}); }); –

0

Vous devez retirer le function() autour that.clicknextbutton(), et changer that à this. that n'a de sens que s'il s'agit d'une variable définie sur le mot clé this. La syntaxe function(){} est utilisée pour définir une expression dans un paramètre.

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

}); 
+0

Merci beaucoup pour cela! Cela semble déjà mieux, mais je reçois maintenant une autre erreur: Jeton inattendu}. :( –

+0

J'avais une syntaxe incorrecte, j'ai modifié pour le faire fonctionner maintenant, j'ai raté le ');' à la fin de l'écouteur d'événement. – grt812