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

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

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

dehua dong发布于 2025/1/19更新于 2026/7/2334 浏览
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. 处理剪贴板
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 本地运行 AI 大模型指南:Ollama 快速上手
  • GitHub Copilot 登录失败排查指南:7 个关键检查点
  • IntelliJ IDEA 中 Java AI 插件安装与实战指南
  • 本地搭建 Stable Diffusion AI 绘画工具完整指南
  • MySQL Windows 环境安装与配置指南
  • Vibe Coding:AI 时代的新编程范式
  • 电科金仓发布融合数据库 KES V9 2025 及 AI 产品体系
  • VS Code 配置 C/C++ 编程运行环境
  • Java Web 开发入门:基础概念与静态资源解析
  • 基于 Leaflet-Trackplayer 实现高速轨迹 WebGIS 可视化实战
  • 基于 OpenClaw 和 Ollama 搭建本地 AI 智能体教程
  • Ollama 支持 Llama 3.2 Vision 及视觉 RAG 系统搭建指南
  • 基于 Leaflet Trackplayer 的 WebGIS 高速公路轨迹可视化
  • Java 多线程与并发核心机制详解
  • C++ string 类模拟实现详解
  • 基于 Python Flask 的二手教材交易平台设计与实现
  • MC.JS WEBMC1.8 实战:构建在线多人沙盒游戏
  • GCC 编译系列:静态库工具 AR 详解
  • GitHub Copilot Pro 使用指南与模型配额解析
  • CSP 信奥赛 C++ 摩尔投票算法详解

相关免费在线工具

  • 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