in datawig-js/static/jspsych-6.1.0/jspsych.js [2021:2077]
var listener_function = function(e) {
var key_time;
if (parameters.rt_method == 'performance') {
key_time = performance.now();
} else if (parameters.rt_method == 'audio') {
key_time = parameters.audio_context.currentTime
}
var valid_response = false;
if (typeof parameters.valid_responses === 'undefined' || parameters.valid_responses == jsPsych.ALL_KEYS) {
valid_response = true;
} else {
if(parameters.valid_responses != jsPsych.NO_KEYS){
for (var i = 0; i < parameters.valid_responses.length; i++) {
if (typeof parameters.valid_responses[i] == 'string') {
var kc = jsPsych.pluginAPI.convertKeyCharacterToKeyCode(parameters.valid_responses[i]);
if (typeof kc !== 'undefined') {
if (e.keyCode == kc) {
valid_response = true;
}
} else {
throw new Error('Invalid key string specified for getKeyboardResponse');
}
} else if (e.keyCode == parameters.valid_responses[i]) {
valid_response = true;
}
}
}
}
// check if key was already held down
if (((typeof parameters.allow_held_key == 'undefined') || !parameters.allow_held_key) && valid_response) {
if (typeof held_keys[e.keyCode] !== 'undefined' && held_keys[e.keyCode] == true) {
valid_response = false;
}
}
if (valid_response) {
// if this is a valid response, then we don't want the key event to trigger other actions
// like scrolling via the spacebar.
e.preventDefault();
parameters.callback_function({
key: e.keyCode,
rt: key_time - start_time
});
if (keyboard_listeners.includes(listener_id)) {
if (!parameters.persist) {
// remove keyboard listener
module.cancelKeyboardResponse(listener_id);
}
}
}
};