HTML+JS实现文本域字母替换为输入框值功能失效求助
问题原因
- 映射对象
MapObj仅在脚本初始化阶段生成一次,后续修改INPUT1的值只会更新VarTest变量,不会同步更新MapObj.a的取值,导致替换逻辑一直使用页面加载时的初始空值 - 对textarea赋值时错误使用
innerHTML属性,应使用value属性避免特殊字符、换行符处理异常 - 事件调用存在大小写笔误:
textarea_up的onkeyup属性中写的是Refreshcool(),但实际定义的函数名为大写C的RefreshCool(),导致事件触发失效 - 代码中存在大量未声明的全局变量,容易出现作用域混乱
修复方案
你可以直接使用如下调整后的代码:
<textarea id="textarea_up" onkeyup="handleUpdate()" type="text" name="filter_name" rows="10" cols="75"></textarea> <textarea id="textarea_down" type="text" rows="10" cols="75" readonly></textarea> <br><br> a = <input type="text" onkeyup="handleUpdate()" id="INPUT1" name="name" required minlength="4" maxlength="8" size="10"> <p id="ShowText"></p> <script> // 统一更新函数,避免多事件重复调用逻辑混乱 function handleUpdate() { const fieldUp = document.getElementById("textarea_up"); const fieldDown = document.getElementById("textarea_down"); const inputVal = document.getElementById("INPUT1").value; // 实时生成映射对象,确保取到INPUT1的最新值 const mapObj = { a: inputVal, b: "beet" }; // 替换逻辑 const reg = new RegExp(Object.keys(mapObj).join("|"), "g"); const result = fieldUp.value.replace(reg, matched => mapObj[matched]); // textarea赋值使用value属性 fieldDown.value = result; // 同步更新ShowText展示 document.getElementById("ShowText").innerHTML = inputVal; } </script>
内容的提问来源于stack exchange,提问作者Thankforhelp
相关产品推荐
相关产品推荐

