如何根据两个输入框的动态输入值生成指定格式的字符串?
问题描述
我有两个输入框p1和p2,希望将它们的值存储为特定格式的字符串:
- 仅输入
p1的值时,字符串为"Partner IN (" + document.getElementById("p1").value + ")" - 同时输入
p1和p2的值时,字符串为"Partner IN (" + document.getElementById("p1").value + "," + document.getElementById("p2").value + ")"
要求变量ep能实时获取用户多次修改后的最新值。
现有代码:
<div> <input id="p1" type="text" value="" /> <br> <br> <input id="p2" type="text" value="" /> </div>
let ep; document.getElementById("p1").addEventListener("blur", () => { document.getElementById("p2").addEventListener("blur", () => { if (document.getElementById("p2").value.length == 0) { ep = "Partner IN (" + document.getElementById("p1").value + ")"; } else { ep = "Partner IN (" + document.getElementById("p1").value + "," + document.getElementById("p2").value + ")"; } }); ep = "Partner IN (" + document.getElementById("p1").value + ")"; console.log(ep) });
原代码问题
- 在
p1的失焦事件里重复绑定p2的失焦监听,每次触发p1失焦都会多绑一次,导致后续p2失焦时逻辑重复执行 - 只有
p1失焦或嵌套的p2失焦才更新ep,用户输入过程中没法实时拿到最新值 - 没处理
p1为空但p2有值的情况,逻辑覆盖不全
修正方案
写一个统一的更新函数,给两个输入框绑定input(实时响应输入)和blur(失焦时同步)事件,每次触发都重新计算ep:
let ep; // 专门计算ep的函数 function updateEp() { const p1Val = document.getElementById("p1").value.trim(); const p2Val = document.getElementById("p2").value.trim(); if (p1Val && !p2Val) { ep = `Partner IN (${p1Val})`; } else if (p1Val && p2Val) { ep = `Partner IN (${p1Val},${p2Val})`; } else { // p1为空时的默认值,可根据需求调整 ep = ""; } console.log(ep); // 实时打印最新值,方便调试 } // 给两个输入框绑定事件,确保任何修改都能同步ep document.getElementById("p1").addEventListener("input", updateEp); document.getElementById("p1").addEventListener("blur", updateEp); document.getElementById("p2").addEventListener("input", updateEp); document.getElementById("p2").addEventListener("blur", updateEp);
<div> <input id="p1" type="text" value="" /> <br> <br> <input id="p2" type="text" value="" /> </div>
方案说明
- 用
input事件保证用户输入时实时更新ep,blur事件作为补充,防止用户通过粘贴等操作后离开输入框时未同步 - 模板字符串替代加号拼接,代码更简洁易读
- 对输入值做
trim()处理,避免误输入的空格干扰判断逻辑 - 补充了
p1为空时的处理逻辑,可根据实际需求修改默认值
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

