var listener_function = function()

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