【问题标题】:Why does Javascript only count carriage returns as one character when it is two?为什么Javascript只将回车计为一个字符,而它是两个?
【发布时间】:2012-04-19 08:11:19
【问题描述】:

【问题讨论】:

标签: javascript dom carriage-return


【解决方案1】:

由于未知的原因,jQuery 总是将 <textarea> 值中的所有换行符转换为单个字符。也就是说,如果浏览器给它\r\n 换行,jQuery 会确保它在.val() 的返回值中只是\n。 (实际上原因可能不是“未知”;可能是为了跨浏览器标准化结果,因为 IE 报告换行符为 2 个字符长。)

Chrome 和 Firefox 都以相同的方式计算 <textarea> 标记的长度,以达到“最大长度”的目的。

但是,HTTP 规范坚持将换行符表示为 \r\n。因此,jQuery、webkit 和 Firefox 都犯了这个错误。字段发布后,webkit 和 Firefox 会正确添加换行符!

如果您的服务器端代码确实为字段值设置了固定的最大大小,那么<textarea> 标签上的“maxlength”几乎毫无用处。

编辑这在 2015 年仍然是一个问题 - 至少在 Chrome 45.0.2454 和 IE 11.0.9600 上。

【讨论】:

  • "如果你的服务器端代码确实有一个字段值的固定最大大小,那么结果是
  • @wired_in 不,因为浏览器维护者是奇怪的人,他们似乎并不理解maxlength 的全部意义(我个人的看法)。我已经记录了针对 Firefox 和 WebKit 的错误,并且我得到的奇怪的不知情的回击数量是惊人的。 maxlength 实现检查由.value 返回的长度,也就是说长度没有表单发布时引入的CR 字符。我已经继续前进,我将继续使用我的 JavaScript 解决方案。
  • "maxlength 实现检查.value 返回的长度,也就是说没有 CR 字符的长度" - 反过来。 maxlength 计算 CR+LF(JavaScript 不计算) - 如上面的 jsfiddle 和链接问题所示。因此,maxlength 对于服务器端代码实际上是正确的,如果您还使用客户端 JavaScript 处理它,这只是一个“问题”。
  • @w3d 等等,我收回这句话——见this extremely simple jsfiddle。输入内容,包括硬回车,并查看 Firefox 允许您输入多少个字符。 Firefox 40.0.3 显然将硬返回视为 1 个字符,而不是 2 个。
  • 我已经更新了 JS fiddle,以便在您输入 jsfiddle.net/E527z/35 时更快/即时更新,但我没有看到任何浏览器将 textarea 换行符视为 2 个字符 (\r + @ 987654339@) 在 JavaScript 中或在应用 maxlength 属性(包括最高 65/67 的 Chrome)时...提交到服务器时,按照规范的预期,换行符“加倍”为 \r\n
猜你喜欢
  • 2016-06-19
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多