2012-04-05 12 views
12

Esta es una rama de esta pregunta: Chrome counts characters wrong in textarea with maxlength attribute¿Por qué Javascript solo cuenta los retornos de carro como un carácter cuando son dos?


En esta pregunta se encontró que Javascript counts carriage returns are one character when in fact it is two (\r\n), ¿por qué?

prueba violín: http://jsfiddle.net/maniator/E527z/

+4

Aquí está su respuesta con evidencia: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#concept-textarea-api-value –

Respuesta

22

Por razones desconocidas, jQuery siempre convierte todos los saltos de línea en el valor de una <textarea> a un solo carácter. Es decir, si el navegador le da \r\n para una nueva línea, jQuery se asegura de que sea solo \n en el valor de retorno de .val(). (En realidad, la razón probablemente no es "desconocida"; es probable que normalice los resultados en los navegadores, porque IE informa que las nuevas líneas tienen 2 caracteres de longitud).

Chrome y Firefox cuentan la longitud de las etiquetas <textarea> de la misma manera los propósitos de "maxlength".

Sin embargo, la especificación HTTP insiste en que las líneas nuevas se representan como \r\n. Por lo tanto, jQuery, webkit y Firefox todos obtienen esto mal. Cuando se publica el campo, ¡webkit y Firefox agregan correctamente las nuevas líneas!

El resultado es que "maxlength" en las etiquetas <textarea> es bastante inútil si su código del lado del servidor realmente tiene un tamaño máximo fijo para un valor de campo.

Editar Esto sigue siendo un problema en 2015, al menos en Chrome 45.0.2454 e IE 11.0.9600.

+3

"The upshot es que "maxlength" en las etiquetas