You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现多文本框输入内容合并至用户名/密码输入框的问题

解决方案:合并多输入框内容同步到用户名和密码框

修正后的完整代码

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>


<style>
    .flex{
        display: flex;
    }
    .otSc {
        margin: 0;
        margin-right: 16px;
        border: 1px solid;
        border-radius: 8px;
        padding: 1px 0px;
        font-size: 15px;
        text-align: center;
        width: 100%;
        outline: none;
    }
    .otSc:last-child{
        margin-right: 0;
    }
    .otpCont {
        padding: 10px 10px;
    }
</style>

<div class="col-md-3">
    <div class="otpCont flex spaceBetween">
        <input class="otSc" type="text" maxlength="1">
        <input class="otSc form-control" type="text" maxlength="1">
        <input class="otSc form-control" type="text" maxlength="1">
        <input class="otSc form-control" type="text" maxlength="1">
        <input class="otSc form-control" type="text" maxlength="1">
        <input class="otSc form-control" type="text" maxlength="1">
    </div>

    <p>顶部输入的内容应合并后显示在底部</p>
    <div class="col-md-6 m-b-15" >
        <input id="usernameInput" type="text" class="form-control" name="username" placeholder="合并后的用户输入"/>
    </div>
    <div class="col-md-6 m-b-15" >
        <input id="passwordInput" type="text" class="form-control" name="password" placeholder="合并后的密码输入"/>
    </div>
</div>
<script type="text/javascript">
    // 合并OTP输入框内容并同步到用户名和密码框
    function mergeOtpAndSync() {
        let mergedValue = '';
        document.querySelectorAll('.otSc').forEach(input => {
            mergedValue += input.value || '';
        });
        // 同步到两个输入框
        document.getElementById('usernameInput').value = mergedValue;
        document.getElementById('passwordInput').value = mergedValue;
    }

    // 为所有OTP输入框绑定输入事件(覆盖键盘输入、粘贴等场景)
    document.querySelectorAll('.otSc').forEach(function(otpEl) {
        otpEl.addEventListener('input', mergeOtpAndSync);
        otpEl.addEventListener("keyup", backSp);
        otpEl.addEventListener("keypress", function(e) {
            // 仅当输入有效字符时跳转到下一个输入框
            if (/^[0-9a-zA-Z]$/.test(e.key)) {
                const nexEl = this.nextElementSibling;
                if (nexEl) nexEl.focus();
            }
        })
    })

    function backSp(backKey) {
        if (backKey.keyCode === 8 && !this.value) {
            // 仅当当前输入框为空时,退格键才跳转到上一个输入框
            const prev = this.previousElementSibling;
            if (prev) prev.focus();
        }
    } 
</script>

关键修改说明

  • 修正ID重复问题:原代码中用户名和密码框使用了相同的id="maxVoucherCode",违反DOM唯一性规则,已分别改为usernameInput和passwordInput。
  • 新增合并同步函数:mergeOtpAndSync函数遍历所有.otSc输入框,拼接所有输入值后,同步设置到用户名和密码框。
  • 完善输入事件监听:使用input事件替代单一的keyup,覆盖键盘输入、鼠标粘贴等所有内容变更场景,确保合并值实时更新。
  • 优化焦点跳转逻辑:
    • 仅在输入有效单字符时,才跳转到下一个输入框
    • 仅在当前输入框为空时,退格键才跳转到上一个输入框,避免无效焦点切换

内容的提问来源于stack exchange,提问作者Penwell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:34:56