如何通过onkeypress和onpaste限制输入框的负值输入
解决输入框禁止输入负号(含粘贴操作)的问题
问题说明
需要限制输入框,无论是直接按键输入还是粘贴操作,都不允许出现负号(-),但现有代码无法实现粘贴时的拦截效果。
原代码问题分析
- 粘贴事件逻辑完全错误:原粘贴事件里的判断条件
(event.which == 17 || event.which == 86) && event.which == 189永远不会成立——一个事件的键码不可能同时等于189(负号键)和17(Ctrl键)/86(V键),所以根本触发不了阻止操作。 - 粘贴操作的核心判断逻辑错误:拦截粘贴不能靠按键码,而是要读取剪贴板里的文本内容,检查是否包含负号。
修正后的代码实现
<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
相关产品推荐
相关产品推荐

