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

如何通过onkeypress和onpaste限制输入框的负值输入

解决输入框禁止输入负号(含粘贴操作)的问题

问题说明

需要限制输入框,无论是直接按键输入还是粘贴操作,都不允许出现负号(-),但现有代码无法实现粘贴时的拦截效果。

原代码问题分析

  1. 粘贴事件逻辑完全错误:原粘贴事件里的判断条件(event.which == 17 || event.which == 86) && event.which == 189永远不会成立——一个事件的键码不可能同时等于189(负号键)和17(Ctrl键)/86(V键),所以根本触发不了阻止操作。
  2. 粘贴操作的核心判断逻辑错误:拦截粘贴不能靠按键码,而是要读取剪贴板里的文本内容,检查是否包含负号。

修正后的代码实现

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" class="form-control">
$("input").keydown(function(event) {
    // 阻止输入负号(兼容不同键盘:45是小键盘负号,189是主键盘减号)
    if (event.which === 45 || event.which === 189) {
        event.preventDefault();
    }
}).on("paste", function(event) {
    // 获取剪贴板中的文本内容
    const pasteContent = (event.originalEvent || event).clipboardData.getData('text');
    // 若内容含负号,直接阻止粘贴
    if (pasteContent.includes('-')) {
        event.preventDefault();
    }
});

补充说明

  • 改用keydown事件比keypress更可靠,部分浏览器中keypress不会触发特殊按键的事件响应。
  • 粘贴时直接读取剪贴板内容做校验,能从根源拦截包含负号的非法内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:06:23