Chrome使用maxlength属性计算textarea中的字符错误

这是一个例子:


$(function() {

  $('#test').change(function() {

    $('#length').html($('#test').val().length)

  })

})

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<textarea id=test maxlength=10></textarea>

length = <span id=length>0</span>

在行中填充文本区域(一行中一个字符),直到浏览器允许为止。完成后,离开textarea,js代码也将计算字符。


因此,就我而言,在chrome阻止我之前,我只能输入7个字符(包括空格)。尽管maxlength属性的值为10:


动漫人物
浏览 781回答 3
3回答

泛舟湖上清波郎朗

关于maxlength,您的回车符被视为每个2个字符。1\r\n1\r\n1\r\n1但似乎javascript只能\r\n(最多加7)之一(我不确定是哪一个)。

天涯尽头无女友

由于未知原因,jQuery始终将a值中的所有换行符转换<textarea>为单个字符。也就是说,如果浏览器为\r\n换行符提供了它,那么jQuery确保它只是\n在返回值中.val()。Chrome和Firefox都<textarea>出于“最大长度”的目的以相同的方式计算标签的长度。但是,HTTP规范坚持将换行符表示为\r\n。因此,jQuery,webkit和Firefox都会出错。结果是,<textarea>如果服务器端代码的字段值确实具有固定的最大大小,则标记上的“ maxlength” 几乎没有用。编辑 -至此(2014年末),Chrome(38)的行为似乎正确。但Firefox(33)仍未将每次硬回返都算作2个字符。
打开App,查看更多内容
随时随地看视频慕课网APP