在jq中textarea用val()与text()取回车换行值得差异

JQuery TextArea的取值与赋值问题
首先,说明这不是一个简单的问题!
先说取值:
(“#textarea”).text();读取,最近测试时候发现在firefox中读取不出textArea的值,IE正常  
于是修改为:
(“#textarea”).val();
问题解决,不过搜索时,发现有人提另一个问题:
当在一个textarea标签中键入一个回车时,实际上会插入2个符号:\n\r \n 回车符 \r 换行符
如果用text()获取textarea中的值,那么存入数据库的数据就只会有\r 如果用var()获取textarea中的值,
那么存入数据库的数据就只会有\n 这样的区别就是,在IE下,
你如果是读取用text()存入的数据在展示在textarea中,那么数据的换行是正常的。
而读取用var()存入的数据在展示在textarea中,那么数据的就不会换行。
没有具体测试过看来用val()也不妥当。但是这也是必求之策。 再说赋值: 看代码: ("<divid=x1><textareaid=t1></textarea>"+"<textareaid=t2></textarea></div>").appendTo("body"); (“#t1”).text(“AAA”);("#t2").val("BBB");alert("t1=" +(“#t1”).text() + “/” + ("#t1").val());alert("t2=" +(“#t2”).text() + “/” + ("#t2").val());alert((“#x1”).html());
在IE下,不管用val()或text()设定,后续的读取都正常;但在Firefox下,使用val()指定的值,画面上会出现,但是用text()或是透过html()检视时却是字串。因此在Firefox中,如果你希望设定给textarea值出现在html()中或可以被clone(),请用text(…)设定。
且慢!! 事情如果这麽单纯,那麽连小学生也会跨浏览器了。使用text()设定时得注意换行问题,若你在IE中下text(“A\nA”),在显示时只会呈现空一格而不会换行。依我测试的结果,在IE下text(“A\r\A”)得到显示结果比较接近预期,但是text(“A\rA”)在Firefox中显示时会换列,用text()取出时却是连在一起的… 这… 这… 这…
最后,只能采取懦夫策略,在呼叫.clone()前做了这件事迴避问题:
theDiv.find("textarea").each(function() {(this).text($(this).val()); });
很丑,但看来是有效的! 如果有人有其他好点子,再分享一下吧!
【著名心得】没有噼成一字马的本事,不要跟别人说你会”跨”浏览器!

——————重要问题—————-
textarea中把回车键当作快捷键时候,并不要他显示换行动作。但浏览器处理了连个动作。
无赖 (textarea).val(); (document).keypress(function(e){
if(e.ctrlKey && e.which == 13 || e.which == 10 || e.which == 13) {
(“#send”).click();  
e.preventDefault();//屏蔽enter对系统作用。按后增加\r\n等换行
(“#what”).val(“”);
}
});
e.preventDefault();就是屏蔽enter键接下来的操作,啊哈哈哈。知道此招的固然是高人,莫笑小弟之欣喜。

你可能感兴趣的:(jQuery)