keyup срабатывает при удалении буквы а не при вводе 
		
		
		
		Подключил процедуру ajax. Все вроде работает нормально но... Вместо события по вводу букв в поле input получается что срабатывает только при удалении букв из поля. Как это починить/исправить? 
	
window.addEventListener("load", function(){
    // Add a keyup event listener to our input element
    var name_input = document.querySelector('.name_input');
    name_input.addEventListener("keyup", function(event){hinter(event)});
    // create one global XHR object 
    // so we can abort old requests when a new one is make
    window.hinterXHR = new XMLHttpRequest();
});
// Autocomplete for form
function hinter(event) {
    // retireve the input element
    var input = event.target;
    // retrieve the datalist element
    var huge_list = document.getElementById('huge_list');
    // minimum number of characters before we start to generate suggestions
    var min_characters = 1;
    if (input.value.length < min_characters ) { 
        return;
    } else { 
        // abort any pending requests
        window.hinterXHR.abort();
        window.hinterXHR.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                // We're expecting a json response so we convert it to an object
                var response = JSON.parse(this.responseText); 
                // clear any previously loaded options in the datalist
                huge_list.innerHTML = "";
                response.forEach(function(item) {
                    // Create a new <option> element.
                    var option = document.createElement('option');
                    option.value = item;
                    // attach the option to the datalist element
                    huge_list.appendChild(option);
                });
            }
        };
        window.hinterXHR.open("GET", "query.php?query="+input.value+"&data="+Math.random(), true);
        window.hinterXHR.send()
    }
 }
 | 
	
		
 Событие Keyup срабатывает при любом нажатии клавиши. 
	Попробуйте так: 
window.addEventListener('load', function () {
    var MIN_CHARACTERS_NUMBER = 1;
    var DELAY = 300;// ms
    
    var nameInput = document.querySelector('.name_input'),
        hugeList = document.getElementById('huge_list');
        
    if (!nameInput || !hugeList) {
        return void console.error('Input or List not found');
    }
    
    var getRequestUrl = function (queryString) {
        return 'query.php?query=' + encodeURIComponent(queryString) + '&data=' + new Date();
    };
    
    var abortController,
        timer = 0;
    
    nameInput.addEventListener('input', function (event) {
        var value = this.value.trim();
        if (value.length < MIN_CHARACTERS_NUMBER) {
            return;
        }
        
        clearTimeout(timer);
        
        timer = setTimeout(function (queryString) {
            var requestUrl = getRequestUrl(queryString);
            
            if (abortController) {
                abortController.abort();
            }
            
            abortController = new AbortController();
            
            fetch(requestUrl, {
                signal: abortController.signal
            }).then(function (res) {
                return res.json();
            }).then(function (response) {
                abortController = undefined;
                
                hugeList.innerHTML = '';
                response.forEach(function (item) {
                    var listItem = document.createElement('option');
                    listItem.value = item;
                    hugeList.appendChild(listItem);
                });
            });
        }, DELAY, value);
    });
});
 | 
	
		
 Rise, поправил, спасибо. 
	 | 
| Часовой пояс GMT +3, время: 14:29. |