JSFiddle - React, Tailwind, and code Playground

HTML

<input type="text" id="listen-scanner" /><span id="output-scanner"></span><br />
<select id="listen-combo">
    <option value="AA">Aardvarc</option>
    <option value="AB">Abracabra</option>
    <option value="AC">Accelerate</option>
    <option value="AD">Adult</option>
</select><span id="output-combo"></span>
<textarea id="listen-text"></textarea>

JavaScript

;(function($){
    $.keyListener = function(sel, options){
        // avoid scope issues by using base instead of this
        var base = this;
        
        // Setup jQuery DOM elements
        base.$sel = $(sel);
        base.sel = sel;
        base.keyPresses = '';
        base.validater = null;
        
        // add a reverse reference to the DOM object
        base.$sel.data('keyListener', base);
        
        // create an initialization function we can call
        base.init = function(){
            base.opts = $.extend({}, $.keyListener.defaultOptions, options);
            
            base.$sel.keypress(function(e){
                base.keyPresses += String.fromCharCode(e.which);
                
                if (base.validator != null)
                    clearTimeout(base.validator);
                if (base.keyPresses != '')
                    base.validator = setTimeout(base.validateInput, base.opts.callbackDelay);
                    
                if (base.opts.preventDefault)
                    e.preventDefault();
                else if (base.opts.stopPropagation)
                    e.stopPropagation();
            });
        };
        
        base.validateInput = function(){
            var filter = base.opts.filter;
            var reCompare = (typeof(filter)=='object'
                             ? filter.constructor.toString().match(/regexp/i)!==null
                             : false);
            
            // exception when the input is cleared out
            var input = base.sel.constructor.toString().match(/HTMLInputElement|HTMLSelectElement|HTMLTextAreaElement/i);
            if (input && (!base.opts.preventDefault && base.$sel.val() == ''))
                base.keyPresses = '';
            
            // regular expression match
            if (reCompare){
                if (base.keyPresses.match(filter))
                    base.validateSuccess();
                else
                   ...