2010-11-18 10 views
3

Eine der am meisten empfohlenen Möglichkeiten, auf eine Änderung eines Eingabetextfeldes zu warten, besteht darin, dieses Feld an ein Key-Up-Ereignis zu binden. Das funktioniert in den meisten Fällen gut. Aber es gibt Fälle, in denen dies nicht funktioniert. In Firefox zum Beispiel hat man die Möglichkeit, wenn Text bereits ausgewählt ist, diese über das Kontextmenü zu löschen. Und dies löst kein Key-up-Ereignis aus. Ich habe kein Ereignis gefunden, das für dieses Textfeld ausgelöst wird. Irgendwelche Vorschläge, wie ich darauf reagieren kann (in reinem Javascript oder jQuery)?Höre auf das Löschen des Eingabewerts

Antwort

8

Sehen Sie die oninput Veranstaltung, und meine schreiben darüber here.

oninput wird für alle Formen der Texteingabe ausgelöst - einschließlich Ausschneiden, Einfügen, Rückgängig machen, Wiederholen, Löschen, Ziehen und Fallenlassen und Rechtschreibkorrekturen. Es ist ein HTML 5-Ereignis, das in Internet Explorer 8 und niedriger nicht unterstützt wird (aber es ist in der neuesten IE 9-Vorschau). Internet Explorer unterstützt jedoch ein proprietäres Ereignis für alle DOM-Objekte - onpropertychange. Dies wird ausgelöst, wenn sich der Wert eines Eingabeelements ändert.

Ich habe nicht bemerkt, Sie mit — markiert würden, da du getan hast, ist es wahrscheinlich erwähnenswert, dass ich ein Plugin schrieb den oninput Ereignis Cross-Browser zu implementieren. Sie können es finden.

+0

Sie haben dieses Problem zugenäht, denke ich. –

+0

@Tim: haha, ich versuche es sicher :-) –

+0

@Tim: Abgesehen von den Bugs, die er in seinem Blogpost erwähnt, ja. –

0

Der beste Weg ist, den Wert auf einem focus Ereignis zu speichern und den Wert auf einem blur Ereignis erneut zu überprüfen. Das Abhören von Schlüsselereignissen löst viele normalerweise redundante Prozesse aus. Die meiste Zeit sind Sie nur an einem Feldwert interessiert, wenn der Benutzer die Eingabe (oder das Löschen) beendet hat.

Dies funktioniert über den Browser, obwohl das Delegieren von Fokus/Unschärfe in einigen Browsern ein Problem darstellen kann. Der einfachste Weg ist das direkte Anwenden von Blur/Fokus-Listenern auf das Element.

Nur Ausnahmen sind Implementierungen wie Autosuggest/Complete, und selbst dann möchten Sie möglicherweise die Tasteneingabe entprellen, sodass sie nur ausgelöst wird, wenn der Benutzer einige hundert Millisekunden im Leerlauf läuft.

Verwandte Themen