# jsPsych --- ## initJsPsych ```javascript var jsPsych = initJsPsych(settings); ``` ### Parameters | Parameter | Type | Description | | --------- | ------ | ---------------------------------------- | | settings | object | The settings object for initializing jsPsych. See table below. | The settings object can contain several parameters. None of the parameters are required. | Parameter | Type | Description | | -------------------------- | -------- | ---------------------------------------- | | display_element | string | The ID of an HTML element to display the experiment in. If left blank, jsPsych will use the `
` element to display content. All keyboard event listeners are bound to this element. In order for a keyboard event to be detected, this element must have focus (be the last thing that the participant clicked on). | | on_finish | function | Function to execute when the experiment ends. | | on_trial_start | function | Function to execute when a new trial begins. | | on_trial_finish | function | Function to execute when a trial ends. | | on_data_update | function | Function to execute every time data is stored using the `jsPsych.data.write` method. All plugins use this method to save data (via a call to `jsPsych.finishTrial`, so this function runs every time a plugin stores new data. | | on_interaction_data_update | function | Function to execute every time a new interaction event occurs. Interaction events include clicking on a different window (blur), returning to the experiment window (focus), entering full screen mode (fullscreenenter), and exiting full screen mode (fullscreenexit). | | on_close | function | Function to execute when the user leaves the page. Can be used, for example, to save data before the page is closed. | | show_progress_bar | boolean | If `true`, then [a progress bar](../overview/progress-bar.md) is shown at the top of the page. Default is `false`. | | message_progress_bar | string or function | Message to display next to the progress bar or a function that returns that message. The default is 'Completion Progress'. If `message_progress_bar` is a function, it receives one single argument which is the current progress, ranging from 0 to 1; the function gets called on every progress bar update automatically. | | auto_update_progress_bar | boolean | If true, then the progress bar at the top of the page will automatically update as every top-level timeline or trial is completed. | | use_webaudio | boolean | If false, then jsPsych will not attempt to use the WebAudio API for audio playback. Instead, HTML5 Audio objects will be used. The WebAudio API offers more precise control over the timing of audio events, and should be used when possible. The default value is `true`. | | default_iti | numeric | The default inter-trial interval in ms. The default value if none is specified is 0ms. | | experiment_width | numeric | The desired width of the jsPsych container in pixels. If left undefined, the width will be 100% of the display element. Usually this is the `` element, and the width will be 100% of the screen size. | | minimum_valid_rt | numeric | The minimum valid response time for key presses during the experiment. Any key press response time that is less than this value will be treated as invalid and ignored. Note that this parameter only applies to _keyboard responses_, and not to other response types such as buttons and sliders. The default value is 0. | | override_safe_mode | boolean | Running a jsPsych experiment directly in a web browser (e.g., by double clicking on a local HTML file) will load the page using the `file://` protocol. Some features of jsPsych don't work with this protocol. By default, when jsPsych detects that it's running on a page loaded via the `file://` protocol, it runs in _safe mode_, which automatically disables features that don't work in this context. Specifically, the use of Web Audio is disabled (audio will be played using HTML5 audio instead, even if `use_webaudio` is `true`) and video preloading is disabled. The `override_safe_mode` parameter defaults to `false`, but you can set it to `true` to force these features to operate under the `file://` protocol. In order for this to work, you will need to disable web security (CORS) features in your browser - this is safe to do if you know what you are doing. Note that this parameter has no effect when you are running the experiment on a web server, because the page will be loaded via the `http://` or `https://` protocol. | | case_sensitive_responses | boolean | If `true`, then jsPsych will make a distinction between uppercase and lowercase keys when evaluating keyboard responses, e.g. "A" (uppercase) will not be recognized as a valid response if the trial only accepts "a" (lowercase). If false, then jsPsych will not make a distinction between uppercase and lowercase keyboard responses, e.g. both "a" and "A" responses will be valid when the trial's key choice parameter is "a". Setting this parameter to false is useful if you want key responses to be treated the same way when CapsLock is turned on or the Shift key is held down. The default value is `false`. | extensions | array | Array containing information about one or more jsPsych extensions that are used during the experiment. Each extension should be specified as an object with `type` (required), which is the name of the extension, and `params` (optional), which is an object containing any parameter-value pairs to be passed to the extension's `initialize` function. Default value is an empty array. | ### Return value Returns a jsPsych instance, which all jsPsych methods on this page are called on. Therefore it is not possible to call any of the jsPsych methods listed on this page until this `initJsPsych` function is called and a jsPsych instance is created. ### Description This function initializes jsPsych with the specified experiment settings. ### Example ```javascript var jsPsych = initJsPsych({ on_finish: function() { jsPsych.data.displayData(); }, show_progress_bar: true, default_iti: 500 }); ``` For more examples, see the HTML files in the [examples folder](https://github.com/jspsych/jsPsych/tree/main/examples). --- ## jsPsych.abortCurrentTimeline ```javascript jsPsych.abortCurrentTimeline() ``` ### Parameters None. ### Return value None. ### Description Ends the current timeline. If timelines are nested, then only the timeline that contains the current trial is ended. ### Example #### Abort timeline if a particular key is pressed ```javascript var jsPsych = initJsPsych({ on_finish: function() { jsPsych.data.displayData(); } }); var images = [ "img/1.gif", "img/2.gif", "img/3.gif", "img/4.gif", "img/5.gif", "img/6.gif", "img/7.gif", "img/8.gif", "img/9.gif", "img/10.gif" ]; var trials = []; for (var i = 0; i < images.length; i++) { trials.push({ stimulus: images[i] }); } var block = { type: jsPsychImageKeyboardResponse, choices: ['y', 'n'], prompt: 'Press "y" to Continue. Press "n" to end this node of the experiment.
', on_finish: function(data) { if (jsPsych.pluginAPI.compareKeys(data.response, 'n')) { jsPsych.abortCurrentTimeline(); } }, timeline: trials } var after_block = { type: jsPsychHtmlKeyboardResponse, stimulus: 'The next node
' } jsPsych.run([block, after_block]); ``` --- ## jsPsych.abortExperiment ```javascript jsPsych.abortExperiment(message, data) ``` ### Parameters | Parameter | Type | Description | | ----------- | ------ | ---------------------------------------- | | message | string | A message to display on the screen after the experiment is over. Can include HTML formatting. | | data | object | An optional object of key-value pairs to store as data in the final trial of the experiment. ### Return value None. ### Description Ends the experiment, skipping all remaining trials. If the `on_finish` event handler for `jsPsych` returns a `Promise` then the `message` will not be displayed until the promise is resolved. ### Example #### End the experiment if a particular response is given ```javascript var trial = { type: jsPsychImageKeyboardResponse, stimulus: 'image1.jpg', choices: ['y', 'n'], prompt: 'Press "y" to Continue. Press "n" to end the experiment
', on_finish: function(data){ if(jsPsych.pluginAPI.compareKeys(data.response, "n")){ jsPsych.abortExperiment('The experiment was ended by pressing "n".'); } } } ``` --- ## jsPsych.abortTimelineByName ```javascript jsPsych.abortTimelineByName() ``` ### Parameters | Parameter | Type | Description | | --------------- | -------- | ---------------------------------------- | | name | string | The name of the timeline to abort. | ### Return value None. ### Description Ends the currently active timeline that matches the `name` parameter. This can be used to control which level is aborted in a nested timeline structure. ### Example #### Abort a procedure if an incorrect response is given. ```javascript const fixation = { type: jsPsychHtmlKeyboardResponse, stimulus: '+
', choices: "NO_KEYS", trial_duration: 1000 } const test = { type: jsPsychImageKeyboardResponse, stimulus: jsPsych.timelineVariable('stimulus'), choices: ['y', 'n'], on_finish: function(data){ if(jsPsych.pluginAPI.compareKeys(data.response, "n")){ jsPsych.abortTimelineByName('memory_test'); } } } const memoryResponseProcedure = { timeline: [fixation, test] } // the variable `encode` is not shown, but imagine a trial that displays // some stimulus to remember. const memoryEncodeProcedure = { timeline: [fixation, encode] } const memoryTestProcedure = { timeline: [memoryEncodeProcedure, memoryResponseProcedure] name: 'memory_test', timeline_variables: [ {stimulus: 'image1.png'}, {stimulus: 'image2.png'}, {stimulus: 'image3.png'}, {stimulus: 'image4.png'} ] } ``` --- ## jsPsych.evaluateTimelineVariable ```js jsPsych.evaluateTimelineVariable(variable_name) ``` ### Parameters | Parameter | Type | Description | | --------- | ---- | ----------- | | variable_name | string | The name of the variable to evaluate. | ### Return value Returns the current value of the corresponding timeline variable. ### Description Unlike `jsPsych.timelineVariable()`, `evaluateTimelineVariable()` immediately returns the current value of the timeline variable. It should be used whenever you are in a context where immediate evaluation is appropriate. For example, if you referencing a timeline variable within a function, immediate evaluation is usually correct. ### Examples #### Invoking timeline variables immediately in a function ```javascript const trial = { type: jsPsychHtmlKeyboardResponse, stimulus: function(){ return `