2012-04-05 8 views
12

To jest pochodną tego pytania: Chrome counts characters wrong in textarea with maxlength attributeDlaczego JavaScript tylko oblicza liczbę znaków powrotu karetki jako jeden znak, gdy jest dwa?


W tej kwestii stwierdzono, że Javascript counts carriage returns are one character when in fact it is two (\r\n), dlaczego tak jest?

test Fiddle: http://jsfiddle.net/maniator/E527z/

+4

Oto twoja odpowiedź z dowodami: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#concept-textarea-api-value –

Odpowiedz

22

Z nieznanych przyczyn, jQuery zawsze konwertuje wszystkie znaki nowej linii w wartość <textarea> do pojedynczego znaku. Oznacza to, że jeśli przeglądarka przyznaje mu \r\n dla nowej linii, jQuery upewnia się, że jest to tylko \n w zwracanej wartości .val(). (W rzeczywistości przyczyna prawdopodobnie nie jest "nieznana" - prawdopodobnie normalizuje wyniki w różnych przeglądarkach, ponieważ IE zgłasza, że ​​znaki nowej linii mają długość 2 znaków.)

Chrome i Firefox obliczają długość tagów <textarea> w ten sam sposób dla w celach "maksymalnej długości".

Jednak specyfikacja HTTP twierdzi, że nowe znaki są reprezentowane jako \r\n. Tak więc, jQuery, webkit i Firefox wszystko to źle. Kiedy pole zostanie opublikowane, webkit i Firefox poprawnie dodają nowe linie!

Efekt jest taki, że "maksymalna długość" na znacznikach <textarea> jest praktycznie bezużyteczna, jeśli kod po stronie serwera rzeczywiście ma ustalony maksymalny rozmiar dla wartości pola.

Edytuj To nadal jest problem w 2015 roku - przynajmniej w Chrome 45.0.2454 i IE 11.0.9600.

+3

"Wynik jest to, że "maksymalna długość" na tagach