jQuery val()获得换行字节数的差异

设计数据库时varchar(xx)需要定制字段的长度,所以在限制客户端输入文本内容时就涉及到计算用户输入内容的多少问题。

用为使用jQuery配合.net写了一个验证控件,客户端获得文本TextBox值时肯定是$("#TextBox").val(),提交后经过服务器端代码验证没通过,老是觉得奇怪,以为是压缩了JS脚本导致JS计算文本长度有异常,今天有时间就逐个拆开调试,发现问题在于jQuery的val(),这回奇怪了,使用document.getElementById('TextBox').value获得值换行占2个字符,而$("#TextBox").val()是1个字符,网上GOOGLE一番,得到的结果是:

windows下换行是:\r\n
linux下是:\n

看来jQuery使用的是linux方式获取值,我没细去查jQuery获得值的算法,因为不可能修改jQuery库,劳民伤财影响后期升级,所以使用windows的朋友使用jQuery设计客户端代码判断文本长度时多留意,以免和我一样出现这样的问题。

posted @ 2010-08-12 10:55 BookWorm 阅读(1830) 评论(1) 编辑 收藏

 回复 引用 查看   
#1楼2010-08-12 11:29 | Arthas-Cui      
我刚试了下。
我写了个TextArea, 里面打个回车。

然后用document.getElementById取出value, 看length。

结果只有IE下是2, FF和Chrome都是1.

也就是说, 可能因为这里存在差异, 所以jQuery在代码里明确做了一个:
return (elem.value || "").replace(/\r/g, "");

这样就不存在差异了。

我不知道javascript的规范里面, 换行是怎么规定的。
不过我记得HTTP协议里面定的换行是CR LF, 也就是\r\n, 刚查了下rfc1945, 没错。就是这样。
如果从这个角度来说, 应该说是IE对了而其他浏览器全错了。
而jQuery是在帮助其他浏览器做错事。
^_^

不过这个错误的, 反倒更容易使用。
也让人挺矛盾的。

p.s. 陈瑞梦曾经写过 一片日志专门提到过, 其实\r\n才是正确的,在打印机里面代表return和next line, 也就是回到开头, 并移动到下一行。
\n来自Unix的错误, 并被一直继承下来。