Choose Form Field Selections On Hotkey

Choose predefined selections for drop-down form fields upon pressing a hotkey. For e.g. country, state, city. If the state or city fields changes dynamically based on the selected country, the hokey will need to be pressed again.

// ==UserScript==
// @name         Choose Form Field Selections On Hotkey
// @namespace    ChooseFormFieldSelectionsOnHotkey
// @version      1.0.1
// @description  Choose predefined selections for drop-down form fields upon pressing a hotkey. For e.g. country, state, city. If the state or city fields changes dynamically based on the selected country, the hokey will need to be pressed again.
// @author       jcunews
// @match        *://*/*
// @grant        none
// ==/UserScript==

var

  //hokey configuration
  hotkeyKey   = "l",   //key name. should be lowercase
  hotkeyShift = false, //need SHIFT key?
  hotkeyCtrl  = true,  //need CTRL key?
  hotkeyAlt   = false, //need ALYT key?

  //Selections to choose if the form fields have them. Case insensitive substring (partial match).
  fieldValues = [
    "United States",   //country name
    "Washington",      //state name
    "Seattle",         //city name
    "General Manager", //occupation
    "English"          //language
    //Can be any number and any text. The script will select it if it matches.
  ];

fieldValues.forEach(
  function(v, i) {
    fieldValues[i] = v.toLowerCase();
  }
);

addEventListener("keydown", function(ev) {
  if ((ev.key === hotkeyKey) && (ev.ctrlKey === hotkeyCtrl) && (ev.shiftKey === hotkeyShift) && (ev.altKey === hotkeyAlt)) {
    Array.prototype.slice.call(document.querySelectorAll("SELECT")).forEach(
      function(select) {
        Array.prototype.slice.call(select.options).some(
          function(option, i) {
            option = option.textContent.toLowerCase();
            if (fieldValues.some(
              function(v) {
                return option.indexOf(v) >= 0;
              }
            )) {
              if (select.selectedIndex !== i) {
                select.selectedIndex = i;
                select.dispatchEvent(new Event("change"));
              }
              return true;
            }
          }
        );
      }
    );
    ev.preventDefault();
    ev.stopPropagation();
    ev.stopImmediatePropagation();
  }
}, true);