2012-04-05 14 views
12

Questo è un ramo di questa domanda: Chrome counts characters wrong in textarea with maxlength attributePerché Javascript conta solo i ritorni a capo come un carattere quando è due?


In questa domanda si è riscontrato che Javascript counts carriage returns are one character when in fact it is two (\r\n), perché?

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

+4

Ecco la tua risposta con le prove: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#concept-textarea-api-value –

risposta

22

Per ragioni sconosciute, jQuery converte sempre tutte le nuove righe nel valore di un <textarea> ad un singolo carattere. Cioè, se il browser lo dà \r\n per una nuova riga, jQuery si assicura che sia solo \n nel valore restituito di .val(). (In realtà, la ragione probabilmente non è "sconosciuta", ma è probabilmente per normalizzare i risultati attraverso i browser, perché IE segnala le nuove righe con 2 caratteri.)

Chrome e Firefox contano entrambi la lunghezza dei tag <textarea> allo stesso modo per gli scopi di "lunghezza massima".

Tuttavia, la specifica HTTP insiste sul fatto che la nuova riga sia rappresentata come \r\n. Pertanto, jQuery, webkit e Firefox si sbagliano tutti. Quando il campo è pubblicato, webkit e Firefox aggiungono correttamente le nuove linee!

Il risultato è che "la lunghezza massima" sui tag <textarea> è praticamente inutile se il codice sul lato server ha una dimensione massima fissa per un valore di campo.

Edit Questo è ancora un problema nel 2015 - almeno su Chrome e IE 45.0.2454 11.0.9600.

+3

"Il risultato è che "maxlength" sui tag