/** * jspsych-survey-multi-choice * a jspsych plugin for multiple choice survey questions * * Shane Martin * * documentation: docs.jspsych.org * */ jsPsych.plugins['survey-multi-choice'] = (function() { var plugin = {}; plugin.info = { name: 'survey-multi-choice', description: '', parameters: { questions: { type: jsPsych.plugins.parameterType.COMPLEX, array: true, pretty_name: 'Questions', nested: { prompt: { type: jsPsych.plugins.parameterType.STRING, pretty_name: 'Prompt', default: undefined, description: 'The strings that will be associated with a group of options.' }, options: { type: jsPsych.plugins.parameterType.STRING, pretty_name: 'Options', array: true, default: undefined, description: 'Displays options for an individual question.' }, required: { type: jsPsych.plugins.parameterType.BOOL, pretty_name: 'Required', default: false, description: 'Subject will be required to pick an option for each question.' }, horizontal: { type: jsPsych.plugins.parameterType.BOOL, pretty_name: 'Horizontal', default: false, description: 'If true, then questions are centered and options are displayed horizontally.' }, name: { type: jsPsych.plugins.parameterType.STRING, pretty_name: 'Question Name', default: '', description: 'Controls the name of data values associated with this question' } } }, randomize_question_order: { type: jsPsych.plugins.parameterType.BOOL, pretty_name: 'Randomize Question Order', default: false, description: 'If true, the order of the questions will be randomized' }, preamble: { type: jsPsych.plugins.parameterType.STRING, pretty_name: 'Preamble', default: null, description: 'HTML formatted string to display at the top of the page above all the questions.' }, button_label: { type: jsPsych.plugins.parameterType.STRING, pretty_name: 'Button label', default: 'Continue', description: 'Label of the button.' }, autocomplete: { type: jsPsych.plugins.parameterType.BOOL, pretty_name: 'Allow autocomplete', default: false, description: "Setting this to true will enable browser auto-complete or auto-fill for the form." } } } plugin.trial = function(display_element, trial) { var plugin_id_name = "jspsych-survey-multi-choice"; var html = ""; // inject CSS for trial html += ''; // show preamble text if(trial.preamble !== null){ html += '
'+trial.preamble+'
'; } // form element if ( trial.autocomplete ) { html += '
'; } else { html += ''; } // generate question order. this is randomized here as opposed to randomizing the order of trial.questions // so that the data are always associated with the same question regardless of order var question_order = []; for(var i=0; i'; // add question text html += '

' + question.prompt if(question.required){ html += "*"; } html += '

'; // create option radio buttons for (var j = 0; j < question.options.length; j++) { // add label and question text var option_id_name = "jspsych-survey-multi-choice-option-"+question_id+"-"+j; var input_name = 'jspsych-survey-multi-choice-response-'+question_id; var input_id = 'jspsych-survey-multi-choice-response-'+question_id+'-'+j; var required_attr = question.required ? 'required' : ''; // add radio button container html += '
'; html += ''; html += '
'; } html += ''; } // add submit button html += ''; html += ''; // render display_element.innerHTML = html; document.querySelector('form').addEventListener('submit', function(event) { event.preventDefault(); // measure response time var endTime = performance.now(); var response_time = endTime - startTime; // create object to hold responses var question_data = {}; for(var i=0; i