抛出问题
最近做项目遇到个需求:“需支持换行,可考虑用富文本,但不提供换行外的其它功能”。
方案
只是需要提供换行而已,所以根本不需要用到富文本。直接用textarea然后用正则匹配把回车转成<br />不就行了吗?
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>回车转<br /></title>
</head>
<body>
<textarea rows="4" cols="50" id='text'></textarea>
<script>
var textarea = document.getElementById('text');
textarea.addEventListener('input', function(e){
var string = e.target.value.replace(/\n/g,'<br />');
console.log(string);
})
</script>
</body>
</html>
思考
- 为什么正则匹配只是
\n
而不需要\r\n
呢?
在JavaScript的string类型中,所有的回车表现形式都只有\n
一种类型,无论在MAC OS系统还是windows系统。实践证明,使用\r\n
匹配反而不起作用 - 监听事件为
input
而不是change
呢?
oninput
事件要求值的每一次更新都触发,而onchange
事件不要球每一次更新都触发,它发生在textarea
(或者input
等)失去焦点时
写在最后
实验证明,后端(java)能接收到textarea保留的回车↵
,并自动转义成\n
的形式,传回来给前端的时候也能自动变成可识别的↵
这种格式。故遇到这种需求时可先不转,试一下前后端对接时能不能自动转换