Das Überprüfen auf Tastenanschläge ist nur eine Teillösung, da der Inhalt eines Eingabefelds mit Mausklicks geändert werden kann. Wenn Sie mit der rechten Maustaste in ein Textfeld klicken, stehen Ihnen Optionen zum Ausschneiden und Einfügen zur Verfügung, mit denen Sie den Wert ändern können, ohne einen Tastendruck auszuführen. Wenn die automatische Vervollständigung aktiviert ist, können Sie mit der linken Maustaste in ein Feld klicken und eine Dropdown-Liste mit zuvor eingegebenem Text abrufen. Mit einem Mausklick können Sie aus einer Auswahl auswählen. Das Überfüllen von Tastenanschlägen erkennt keine dieser Arten von Änderungen.
Leider gibt es kein "Onchange" -Ereignis, das Änderungen sofort meldet, zumindest soweit ich weiß. Es gibt jedoch eine Lösung, die in allen Fällen funktioniert: Richten Sie mit setInterval () ein Timing-Ereignis ein.
Angenommen, Ihr Eingabefeld hat die ID und den Namen "Stadt":
<input type="text" name="city" id="city" />
Haben Sie eine globale Variable namens "Stadt":
var city = "";
Fügen Sie dies Ihrer Seiteninitialisierung hinzu:
setInterval(lookForCityChange, 100);
Definieren Sie dann eine lookForCityChange () -Funktion:
function lookForCityChange()
{
var newCity = document.getElementById("city").value;
if (newCity != city) {
city = newCity;
doSomething(city); // do whatever you need to do
}
}
In diesem Beispiel wird der Wert von "Stadt" alle 100 Millisekunden überprüft, den Sie an Ihre Bedürfnisse anpassen können. Wenn Sie möchten, verwenden Sie eine anonyme Funktion, anstatt lookForCityChange () zu definieren. Beachten Sie, dass Ihr Code oder sogar der Browser möglicherweise einen Anfangswert für das Eingabefeld bereitstellt, sodass Sie möglicherweise über eine "Änderung" informiert werden, bevor der Benutzer etwas unternimmt. Passen Sie Ihren Code nach Bedarf an.
Wenn die Idee, dass ein Timing-Ereignis jede Zehntelsekunde ausgelöst wird, unangemessen erscheint, können Sie den Timer starten, wenn das Eingabefeld den Fokus erhält, und ihn (mit clearInterval ()) bei einer Unschärfe beenden. Ich denke nicht, dass es möglich ist, den Wert eines Eingabefelds zu ändern, ohne dass es den Fokus erhält. Daher sollte das Ein- und Ausschalten des Timers auf diese Weise sicher sein.