Es ist 2012, die Post-PC-Ära ist da und wir haben immer noch mit so etwas Grundlegendem zu kämpfen. Das sollte sehr einfach sein .
Bis sich dieser Traum erfüllt hat, ist dies der beste Weg, dies über einen Browser zu tun: Verwenden Sie eine Kombination aus inputund onpropertychangeEreignissen wie folgt:
var area = container.querySelector('textarea');
if (area.addEventListener) {
area.addEventListener('input', function() {
// event handling code for sane browsers
}, false);
} else if (area.attachEvent) {
area.attachEvent('onpropertychange', function() {
// IE-specific event handling code
});
}
Das inputEreignis kümmert sich um IE9 +, FF, Chrome, Opera und Safari und onpropertychangekümmert sich um IE8 (es funktioniert auch mit IE6 und 7, aber es gibt einige Fehler).
Der Vorteil von inputund onpropertychangebesteht darin, dass sie nicht unnötig ausgelöst werden (wie beim Drücken der Tasten Ctrloder Shift). so , wenn Sie ändern , um eine relativ teure Operation , wenn die Textarea Inhalte ausführen möchten, ist dies der Weg zu gehen .
Jetzt unterstützt IE dies wie immer nur halb: Es wird im IE weder ausgelöst inputnoch ausgelöst, onpropertychangewenn Zeichen aus dem Textbereich gelöscht werden . Wenn Sie also das Löschen von Zeichen im IE behandeln müssen, verwenden Sie keypress(im Gegensatz zur Verwendung von keyup/ keydown, da diese nur einmal ausgelöst werden, selbst wenn der Benutzer eine Taste drückt und gedrückt hält).
Quelle: http://www.alistapart.com/articles/expanding-text-areas-made-elegant/
BEARBEITEN: Es scheint, dass selbst die obige Lösung nicht perfekt ist, wie in den Kommentaren zu Recht ausgeführt: Das Vorhandensein der addEventListenerEigenschaft im Textbereich bedeutet nicht, dass Sie mit einem vernünftigen Browser arbeiten. in ähnlicher Weise das Vorhandensein der attachEventUnterkunft gibt es nicht bedeuten , IE. Wenn Sie möchten, dass Ihr Code wirklich luftdicht ist, sollten Sie dies ändern. Hinweise finden Sie in Tim Downs Kommentar .