You need to enable JavaScript to run this app. 粘贴内容后onmouseout事件未触发导致PIN输入框掩码失效求助
优惠活动
大模型
产品
解决方案
定价
更多

粘贴内容后onmouseout事件未触发导致PIN输入框掩码失效求助

解决方案

前提条件

确保页面已存在如下两个表单元素:

  • 用户交互用的PIN输入框:<input type="text" id="user_pin_code">
  • 存储实际PIN值的隐藏表单域:<input type="hidden" id="PINcode" name="PINcode">

修复后的完整JS代码

$(document).ready(function() {
    let actualTextEntered = "";
    const $pinInput = $("#user_pin_code");
    const $hiddenPin = $("#PINcode");

    // 统一监听所有输入场景:键盘输入、粘贴、剪切、拖拽输入等
    $pinInput.on('input', function(e) {
        const inputVal = $pinInput.val();
        // 过滤掉所有*号,获取本次新增的输入内容
        const newChars = inputVal.replace(/\*/g, "");
        // 追加到实际值末尾
        actualTextEntered += newChars;
        // 同步到隐藏表单域
        $hiddenPin.val(actualTextEntered);
        // 替换输入框显示为对应数量的*
        $pinInput.val("*".repeat(actualTextEntered.length));
    });

    // 监听退格和回车操作,避免重复注册监听器
    $pinInput.on('keydown', function(event) {
        const key = event.key;
        // 退格逻辑:支持逐位删除
        if (key === "Backspace") {
            // 阻止默认退格行为,避免直接删*号导致取值混乱
            event.preventDefault();
            // 只在有内容的时候删除最后一位
            if (actualTextEntered.length > 0) {
                actualTextEntered = actualTextEntered.slice(0, -1);
                $hiddenPin.val(actualTextEntered);
                $pinInput.val("*".repeat(actualTextEntered.length));
            }
        }
        // 回车逻辑:触发表单提交
        if (key === "Return" || key === "Enter") {
            event.preventDefault();
            // 此处可替换为你自己的提交逻辑
            $pinInput.closest('form').submit();
        }
    });

    // 专门处理粘贴事件,兼容所有粘贴场景(右键粘贴/快捷键粘贴)
    $pinInput.on('paste', function(event) {
        event.preventDefault();
        // 读取剪贴板文本
        const clipboardData = event.originalEvent.clipboardData || window.clipboardData;
        const pastedText = clipboardData.getData('text');
        // 过滤非数字内容(PIN一般为数字,可根据需求调整过滤规则)
        const filteredPaste = pastedText.replace(/[^0-9]/g, '');
        // 追加到实际值
        actualTextEntered += filteredPaste;
        // 同步更新
        $hiddenPin.val(actualTextEntered);
        $pinInput.val("*".repeat(actualTextEntered.length));
    });
});

优化点说明

  • 用input事件替换原有的keyup事件,覆盖所有输入场景,解决粘贴操作不触发逻辑的问题
  • 将keydown监听器移到输入事件回调外,避免重复注册导致的内存泄漏问题
  • 优化退格逻辑,支持逐位删除字符,不再直接清空所有已输入内容
  • 新增专门的paste事件处理,直接读取剪贴板内容,避免特殊场景下取值异常
  • 保留了原有的回车提交逻辑,原有业务流程无需调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 05:45:03