跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

JavaScript 文本框字符屏蔽与剪贴板事件处理

综述由AI生成利用 JavaScript 的 keypress 事件和 charCode 属性实现文本框字符屏蔽,如限制仅输入数字。需处理不同浏览器(Firefox、Safari)对非字符键触发 keypress 的差异,并排除 Ctrl 组合键以确保复制粘贴功能正常。此外还介绍了剪贴板相关事件的分类与应用场景。

dehua dong发布于 2025/1/19更新于 2026/6/822 浏览
JavaScript 文本框字符屏蔽与剪贴板事件处理

IE8 及更早版本支持通过范围部分选中文本。这也就是说,要选择文本框中的部分文本,必须先使用 IE 在文本框上提供的 createTextRange() 方法创建一个范围,并使用 moveStart() 和 moveEnd() 范围方法把这个范围放到正确的位置上。不过,在调用这两个方法前需要先调用 collapse() 方法把范围折叠到文本框的开始。接着,moveStart() 可以把范围的起点和终点都移动到相同的位置,再给 moveEnd() 传入要选择的字符总数作为参数。最后一步是使用范围的 select() 方法选中文本,如下面的例子所示:

textbox.value = "Hello world!";
var range = textbox.createTextRange(); // 选择所有文本
range.collapse(true);
range.moveStart("character", 0);
range.moveEnd("character", textbox.value.length);
range.select(); // 选择前 3 个字符
range.collapse(true);
range.moveStart("character", 0);
range.moveEnd("character", 3);
range.select(); // "Hel"
// 选择第 4~6 个字符
range.collapse(true);
range.moveStart("character", 4);
range.moveEnd("character", 6);
range.select(); // "o w"
// "Hello world!"

与其他浏览器一样,如果想要看到选中的效果,则必须让文本框获得焦点。 部分选中文本对自动完成建议项等高级文本输入框是很有用的。

1. 屏蔽字符

有些输入框需要出现或不出现特定字符。例如,让用户输入手机号的文本框就不应该出现非数字字符。我们知道 keypress 事件负责向文本框插入字符,因此可以通过阻止这个事件的默认行为来屏蔽非数字字符。比如,下面的代码会屏蔽所有按键的输入:

textbox.addEventListener(,  {
  event.();
});
"keypress"
(event) =>
preventDefault

运行以上代码会让文本框变成只读,因为所有按键都被屏蔽了。如果想只屏蔽特定字符,则需要检查事件的 charCode 属性,以确定正确的回应方式。例如,下面就是只允许输入数字的代码:

textbox.addEventListener("keypress", (event) => {
  if (!/\d/.test(String.fromCharCode(event.charCode))){
    event.preventDefault();
  }
});

这个例子先用 String.fromCharCode() 把事件的 charCode 转换为字符串,再用正则表达式 /\d/ 来测试。这个正则表达式匹配所有数字字符,如果测试失败就调用 preventDefault() 屏蔽事件默认行为。这样就可以让文本框忽略非数字输入。 虽然 keypress 事件应该只在按下字符键时才触发,但某些浏览器会在按下其他键时也触发这个事件。Firefox 和 Safari(3.1 之前) 会在按下上、下箭头键、退格键和删除键时触发 keypress 事件。Safari 3.1 及之后版本对这些键则不会再触发 keypress 事件。这意味着简单地屏蔽所有非数字字符还不够好,因为这样也屏蔽了上述这些非常有用的且必要的键。好在我们可以轻松检测到是否按下了这些键。在 Firefox 中,所有触发 keypress 事件的非字符键的 charCode 都是 0,而在 Safari 3 之前这些键的 charCode 都是 8。综合考虑这些情况,就是不能屏蔽 charCode 小于 10 的键。为此,上面的函数可以改进为:

textbox.addEventListener("keypress", (event) => {
  if (!/\d/.test(String.fromCharCode(event.charCode)) && event.charCode > 9){
    event.preventDefault();
  }
});

这个事件处理程序可以在所有浏览器中使用,屏蔽非数字字符但允许同样会触发 keypress 事件的所有基础按键。 还有一个问题需要处理:复制、粘贴及涉及 Ctrl 键的其他功能。在除 IE 外的所有浏览器中,前面代码会屏蔽快捷键 Ctrl+C、Ctrl+V 及其他使用 Ctrl 的组合键。因此,最后一项检测是确保没有按下 Ctrl 键,如下面的例子所示:

textbox.addEventListener("keypress", (event) => {
  if (!/\d/.test(String.fromCharCode(event.charCode)) && event.charCode > 9 && !event.ctrlKey){
    event.preventDefault();
  }
});

最后这个改动可以确保所有默认的文本框行为不受影响。这个技术可以用来自定义是否在文本框中输入某些字符。

2. 处理剪贴板

IE 是第一个支持剪贴板相关事件及通过 JavaScript 访问剪贴板数据的浏览器。IE 的实现成为了事实标准,这是因为 Safari、Chrome、Opera 和 Firefox 都实现了相同的事件和剪贴板访问机制,后来 HTML5 也增加了剪贴板事件。以下是与剪贴板相关的 6 个事件。

  • beforecopy: 复制操作发生前触发。
  • copy: 复制操作发生时触发。
  • beforecut: 剪切操作发生前触发。
  • cut: 剪切操作发生时触发。
  • beforepaste: 粘贴操作发生前触发。
  • paste: 粘贴操作发生时触发。

目录

  1. 1. 屏蔽字符
  2. 2. 处理剪贴板
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 鸿蒙系统若不再兼容安卓,对行业生态有何影响?
  • llama.cpp 多 GPU 分布式计算优化实践指南
  • 智源研究院开源中英双语 AltDiffusion 模型
  • 无人机视觉语言导航:基本概念与问题定义
  • 前端 Canvas 绘图、动画及交互实战
  • 人工智能该如何学习?详细的AI学习路线与资料推荐
  • AI 绘画关键词网站效率提升实战:从数据预处理到模型加速
  • Windows 下借助 Git Bash 安装 SDKMAN 管理 JDK 多版本
  • UnityMCP+Claude+VSCode 搭建 AI 游戏开发工作流
  • Python Msgpack:高效二进制序列化库
  • 大语言模型(LLM)学习路径:从入门到实战指南
  • Python 列表内存存储本质:差异原因与优化建议
  • 小米智能家居 Miloco 分离式部署指南
  • 前后端分离架构下的 CORS 跨域配置与解决方案
  • Linux 管道通信实战:匿名进程池与命名管道服务端模型
  • SkyWalking Kafka 与 RabbitMQ 消息链路追踪实践
  • Stable Diffusion 插件迁移:Rembg 独立部署与镜像优化实践
  • Linux 线程与进程的资源划分与内核实现全景解析
  • Qwen-Image-Edit-2511 评测:AI 绘画的空间逻辑与几何精度
  • GitHub Copilot、Cursor、JetBrains AI Assistant 使用指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online