Frage Internet Explorer: Wie man Extra-Carriage-Return nach der Bearbeitung von Textarea entkommen kann?


Wir haben ein mehrzeiliges Textfeld im Internet Explorer.

Wenn wir den Inhalt nach dem nächsten überprüfen, ist alles korrekt (es gibt keine zusätzlichen Wagenrückläufe in textarea):

document.getElementById( 'text-area' ).value = "Hello,\nWorld!";

Wenn wir aber auf die Anfangsposition der zweiten Zeile (im Internet Explorer, nicht im Code) und drücke Tab Schlüssel dort ist ein zusätzlicher Wagencharakter (Es gibt einen String Dump auf Taste nach unten unten):

value[0]='H'
value[1]='e'
value[2]='l'
value[3]='l'
value[4]='o'
value[5]=','
value[6]='\r'
value[7]='\n'
value[8]='W'
value[9]='o'
value[10]='r'
value[11]='l'
value[12]='d'
value[13]='!'

Es ist ein Problem, weil andere Browser nicht einfügen zusätzlicher Wagenrücklauf.

Können Sie das im Internet Explorer verhindern? Mit Hilfe von CSS oder Javascript.


5
2018-06-20 14:44


Ursprung


Antworten:


Du kannst es nicht verhindern, und du solltest es wahrscheinlich auch nicht tun. Trotz der Tatsache, dass IE und andere Browser sich darin unterscheiden, wie sie den Wert von <textarea> Elemente, alle Browser enthalten tatsächlich "\ r \ n" für alle harten Zeilenumbrüche im Wert, wenn das Formular um das Element übergeben wird. Mit anderen Worten, obwohl Firefox Zeilenumbrüche als nur "\ n" enthält, liegt es tatsächlich an Ihnen - wenn das Formular veröffentlicht wird, der Wert werden habe auch "\ r" drin.

Aus irgendeinem Grund normalisiert jQuery das Verhalten in den Browsern, indem es die "\" Zeichen entfernt, was natürlich falsch ist. Das bedeutet, dass Sie beim Versuch, Zeichen zu zählen (wie das Kommentarfeld von Stackoverflow), die Tatsache berücksichtigen müssen, dass jedes einzelne "\ n" -Zeichen tatsächlich zwei Zeichen auf dem Server darstellt. Daher müssen Sie entweder das "\" auf dem Server entfernen oder es wahrscheinlich in dem clientseitigen Validierungscode berücksichtigen.


8
2018-06-20 14:47



Mein bester Vorschlag ist, dass Sie Ihre Denkweise über das Problem anpassen.

Wie bereits erwähnt HierEs gibt keinen universellen Newline-Charakter. Einige Betriebssysteme verwenden \n, andere benutzen \r\nund es gab noch andere, die es brauchten \r.

Das HTTP-Protokoll spezifiziert \r\n als das Newline-Zeichen, das zwischen den Headern verwendet werden sollte, so dass jeder Browser (in gewisser Weise) an eine neue Zeile als denken muss \r\n. Wenn Sie jemals eine Zeilenumschaltung verwenden möchten, verwenden Sie einfach \r\n. Sie werden auf diese Weise weniger Kopfschmerzen haben.


5
2018-06-20 14:55



was Sie tun können, ist die Übernahme der Registerkarte Tastendruck und ersetzen Sie es durch Ihre eigene Auswahl:

Siehe hier für eine Lösung:

jQuery: So erfassen Sie den TAB-Tastendruck in einer Textbox


2
2018-06-20 15:14