[问题记录]前端 - textarea赋值前后不等问题

问题描述:项目中在表单提交时,进行表单数据比较,从而记录更改的数据。但发现在未修改textarea值的情况下,比较结果为不相等。本文模拟了问题产生的原因,以及提供了一种解决方法。

问题产生

页面加载完成时会获取到服务器端返回的数据originJson,解析JSON后得到originDatas,页面代码如下:

<!-- index.html -->
<textarea id="ta"></textarea>
<script>
    let originDatas, newDatas
	
	// 页面加载完毕后获取数据
    window.onload = () => {
        // 模拟从服务器获取数据
        getDatasFromServer()
    }

    // 模拟从服务器获取数据
    function getDatasFromServer() {
        setTimeout(() => {
            originJson = '{"value":"123\\r\\nabc\\r\\n"}'
            originDatas = JSON.parse(originJson)
            document.querySelector('#ta').value = originDatas.value
        }, 2000)
    }

</script>

当数据加载完成后,textarea中显示内容如下:
textarea显示
此时如果判断document.querySelector('#ta').value == originDatas.value,返回的结果为false
不相等

产生原因

经检查发现,document.querySelector('#ta').value.length为8,而originDatas.value.length为10,中间差的2个字符其实是\r。从服务器获取到的数据,换行是\r\n,但从文本框控件获取到的数据中,换行是\n。所以就引发了上述问题

解决方法

通过在比较之前对数据进行判断,将所有仅有\n的情况调整为\r\n解决此问题

if (ov.indexOf('\n') > -1 && ov.indexOf('\r\n') <= -1) {
    ov = ov.replace(/\n/g, '\r\n')
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值