2012-04-05 21 views
12

यह इस सवाल की एक शाखा है: Chrome counts characters wrong in textarea with maxlength attributeक्यों जावास्क्रिप्ट केवल एक चरित्र के रूप में कैरिज रिटर्न की गणना करता है जब यह दो होता है?


है कि प्रश्न में यह पाया गया है कि Javascript counts carriage returns are one character when in fact it is two (\r\n), यही कारण है कि है?

टेस्ट फिडल: http://jsfiddle.net/maniator/E527z/

+4

यहां सबूत के साथ आपका जवाब दिया गया है: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#concept-textarea-api-value –

उत्तर

22

अज्ञात कारणों से, jQuery हमेशा एक ही चरित्र के लिए एक <textarea> के मूल्य में सभी नई पंक्तियां बदल देता है। यही है, यदि ब्राउज़र \r\n को एक नई लाइन के लिए देता है, तो jQuery सुनिश्चित करता है कि के वापसी मूल्य में यह केवल \n है। (असल में कारण शायद "अज्ञात" नहीं है; यह संभवतः ब्राउज़र में परिणामों को सामान्यीकृत करना है, क्योंकि आईई 2 अक्षरों के रूप में न्यूलाइन की रिपोर्ट करता है।)

क्रोम और फ़ायरफ़ॉक्स दोनों <textarea> टैग की लंबाई को गिनते हैं "maxlength" के प्रयोजनों।

हालांकि, HTTP spec जोर देता है कि न्यूलाइन को \r\n के रूप में दर्शाया जाना चाहिए। इस प्रकार, jQuery, वेबकिट, और फ़ायरफ़ॉक्स सभी को यह गलत लगता है। जब फ़ील्ड पोस्ट किया जाता है, तो वेबकिट और फ़ायरफ़ॉक्स सही ढंग से न्यूलाइन जोड़ते हैं!

उपरोक्त यह है कि <textarea> टैग पर "अधिकतम लम्बाई" बहुत अधिक बेकार है यदि आपके सर्वर-साइड कोड में फ़ील्ड मान के लिए वास्तव में एक निश्चित अधिकतम आकार है।

संपादित करें यह 2015 में अभी भी एक मुद्दा है - कम से कम क्रोम 45.0.2454 और आईई 11.0.9600 पर।

+3

"अपशॉट क्या