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