Почему Javascript учитывает только возврат каретки как один символ, если его два?

Это ответвление этого вопроса:Chrome считает неправильно символы в текстовой области с атрибутом maxlength

В этом вопросе было установлено, чтоJavascript считает возврат каретки одним символом, хотя на самом деле это два (\r\n), это почему?

Тестовая скрипка:http://jsfiddle.net/maniator/E527z/

 user138519105 апр. 2012 г., 17:47
Вот ваш ответ с доказательствами:whatwg.org/specs/web-apps/current-work/multipage/…

Ответы на вопрос(1)

Решение Вопроса

По неизвестным причинам jQuery всегда конвертирует все новые строки в значение<textarea> одному персонажу. То есть, если браузер дает это\r\n для новой строки jQuery гарантирует, что это просто\n в возвращаемом значении.val(), (На самом деле причина, вероятно, не является «неизвестной»; возможно, она нормализует результаты в разных браузерах, потому что IE сообщает о новых строках длиной 2 символа.)

Chrome и Firefox считают длину<textarea> теги таким же образом для целей "maxlength".

Тем не менее, спецификация HTTP настаивает на том, чтобы переводы строк были представлены как\r\n, Таким образом, jQuery, webkit и Firefox все ошибаются. Когда поле размещено, webkit и Firefox правильно добавляют новые строки!

Результатом является то, что "maxlength" на<textarea> теги бесполезны, если ваш код на стороне сервера действительно имеет фиксированный максимальный размер для значения поля.

Edit Это все еще проблема в 2015 году - по крайней мере, в Chrome 45.0.2454 и IE 11.0.9600.

 03 апр. 2018 г., 17:10
Я обновил скрипку JS, чтобы обновлять быстрее / на лету при вводе текстаjsfiddle.net/E527z/35 но я не вижу ни одного браузера, который рассматривает разрывы строки текста как 2 символа (\r + \n) в JavaScript или при примененииmaxlength атрибут (включая Chrome до 65/67) ... при отправке на сервер разрывы строк "удваиваются"; как\r\n как и следовало ожидать от спецификации.
 30 окт. 2014 г., 05:29
@wired_in нет, потому что сопровождающие браузеры - странные люди, и они, похоже, не понимают всей сутиmaxlength (мое личное мнение). Я зарегистрировал ошибки в Firefox и WebKit, и количество странных неосведомленных откатов, которые я получил, просто поразительно.maxlength реализации проверяют длину, возвращаемую.valueто есть длинаwithout символы CR, которые вводятся при публикации формы. Я перешел, и я просто буду придерживаться своего решения JavaScript.
 06 сент. 2015 г., 00:55
@ w3d подожди, я заберу это обратно - посмотриthis extremely simple jsfiddle, Напечатайте вещи, включая жесткие возвраты, и посмотрите, сколько символов Firefox позволяет вам набирать. Firefox 40.0.3 явно воспринимает трудные возвраты как 1 символ, а не 2.
 05 сент. 2015 г., 23:56
& Quot;maxlength реализации проверяют длину, возвращаемую.value, то есть длина без символов CR & quot; - Это наоборот.maxlength считает CR + LF (чего нет в JavaScript) - как продемонстрировано вышеупомянутым jsfiddle и в связанном вопросе. Так,maxlength на самом деле правильно в отношении кода на стороне сервера, это только "проблема" если вы также обрабатываете это с помощью клиентского JavaScript.
 29 окт. 2014 г., 21:54
«Результатом является то, что« maxlength » на & lt; textarea & gt; теги бесполезны, если ваш код на стороне сервера действительно имеет фиксированный максимальный размер для значения поля. & quot; Я в замешательстве. Мне кажется, вы говорите, что jQuery сообщает о новых строках как один символ, но браузер правильно использует два символа. Если это так, то неmaxlength Атрибут на самом деле работает правильно и считает новые строки двумя символами, как данные будут сохраняться на сервере?

Ваш ответ на вопрос