Проверка нажатий клавиш - это лишь частичное решение, потому что можно изменить содержимое поля ввода с помощью щелчков мыши. Если вы щелкните правой кнопкой мыши текстовое поле, у вас появятся параметры вырезания и вставки, которые можно использовать для изменения значения без нажатия клавиш. Точно так же, если автозаполнение включено, вы можете щелкнуть левой кнопкой мыши в поле и получить раскрывающийся список ранее введенного текста, и вы можете выбрать один из ваших вариантов с помощью щелчка мыши. Захват нажатия клавиш не обнаружит ни один из этих типов изменений.
К сожалению, нет никакого события "onchange", которое немедленно сообщает об изменениях, по крайней мере, насколько мне известно. Но есть решение, которое работает во всех случаях: настроить событие времени с помощью setInterval ().
Допустим, у вашего поля ввода есть идентификатор и название «город»:
<input type="text" name="city" id="city" />
Имейте глобальную переменную с именем "city":
var city = "";
Добавьте это в инициализацию своей страницы:
setInterval(lookForCityChange, 100);
Затем определите функцию lookForCityChange ():
function lookForCityChange()
{
var newCity = document.getElementById("city").value;
if (newCity != city) {
city = newCity;
doSomething(city);
}
}
В этом примере значение «city» проверяется каждые 100 миллисекунд, которое вы можете настроить в соответствии со своими потребностями. Если хотите, используйте анонимную функцию вместо определения lookForCityChange (). Имейте в виду, что ваш код или даже браузер могут предоставить начальное значение для поля ввода, поэтому вы можете быть уведомлены об «изменении» до того, как пользователь что-либо сделает; при необходимости скорректируйте свой код.
Если идея события синхронизации, срабатывающего каждую десятую секунды, кажется неуместной, вы можете запустить таймер, когда поле ввода получает фокус, и завершить его (с помощью clearInterval ()) при размытии. Я не думаю, что можно изменить значение поля ввода без получения фокуса, поэтому включение и выключение таймера таким образом должно быть безопасным.