如何检测文本区域的任何更改?

2024-03-11

我目前已将我的文本区域绑定到几个似乎有效的事件。然而,问题是事件重叠并触发多次,这反过来又使性能降低了太多。

我想要做的几乎是捕获文本区域的任何更改:单击、粘贴、keyup、keydown、右键单击上下文菜单编辑(右键单击、剪切/删除/粘贴)、拖放等。这必须跨域工作- 浏览器至少低至 IE8。当您使用箭头键或类似键在文本区域中移动插入符号时,必须触发事件(我根据插入符号位置等处理更改)。

我不能使用任何重大延误。一旦您对文本区域执行某些操作,事件就必须立即触发并执行我在那里的任何代码。

我目前正在使用 jQuery 来绑定事件,但我对纯 JavaScript 解决方案很满意,只要它可以跨浏览器工作并执行我想要的操作。

这是我当前使用的代码:

var deadKeycodes = [16, 17, 18, 19, 20, 
                    27, 33, 34, 35, 36,
                    38, 40, 44, //37 = left arrow and 39 = right arrow removed, it needs to trigger on those
                    45, 112, 113, 114, 115,
                    116, 117, 118, 119, 120,
                    121, 122, 123, 144, 145];

$(original).bind('propertychange keyup keydown input click', function(e) { 
    if (!Array.prototype.indexOf || deadKeycodes.indexOf(e.keyCode) == -1) { // prevent execution when pressing a 'dead' key
         //do stuff here
    }
});

如果有任何不清楚的地方,请询问,我会为您澄清:)


我认为您无法真正“解决”问题,即阻止多个事件触发。 Keyup 和 Keydown 实际上是不同的事件并且发生在不同的时间。如果您想对这两个事件做出响应(您可能会这样做,因为按下键和向上键都可能会更改文本区域),则需要包含这两个事件。然而,大多数时候它们几乎会同时触发(并且连续多次),正如您所指出的,这可能会造成性能问题。

相反,你可能应该考虑解雇节流 or 去抖打回来。受限制的回调只会每隔一次触发一次n毫秒(适用于可能被调用过多的函数)。去抖回调仅在事件流完成后才会触发;后n自上次回调以来已经过去了几毫秒。

您可以使用下划线轻松完成此操作debounce http://underscorejs.org/#debounce and throttle http://underscorejs.org/#throttle功能。

就像是:

debouncedFn = _.debounce(function(e) { 
    if (!Array.prototype.indexOf || deadKeycodes.indexOf(e.keyCode) == -1) { // prevent execution when pressing a 'dead' key
         //do stuff here
    }
}, 100);

$(original).bind('propertychange keyup keydown input click', debouncedFn);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测文本区域的任何更改? 的相关文章

  • Webpack 和 Angular HTML 图像加载

    我一直对 webpack 和 Angular 感到头疼 这可能有一个简单的答案 但我无法弄清楚 我已经阅读了堆栈溢出中关于这个主题的几乎所有答案 但都无济于事 我有一个像这样的 html 页面 还有其他包含图像的模板 img
  • Twitter Bootstrap 轮播在加载时自动播放

    使用twitter bootstrap框架 如何调用轮播来 自动滑动 这意味着当页面加载时 轮播会自动滚动 我尝试过 javascript onLoad click 函数 a 下一个链接的 但这不起作用 你应该这样做Twitter Boot
  • 变量前面加双下划线

    我的节点代码中有以下代码片段 var fs require fs fs readdir dirname function err files console log files 为什么变量 dirname 有双下划线 我知道一个下划线是私有
  • 语法:const {} = 变量名,任何人都可以解释或指出我正确的方向[重复]

    这个问题在这里已经有答案了 这个语法在 JavaScript 中意味着什么 可能是 ES6 const 变量名 我目前正在尝试掌握 React 在很多例子中我都遇到过这种语法 例如 const girls guys women men st
  • JavaScript 原型 - 请澄清

    有人可以帮我理解原型属性吗 我不明白原型属性是函数的属性还是函数内部的属性 假设我们创建以下构造函数 Food 此时 函数 Food 具有 Food prototype 属性 由于 Food 是 Object 的实例 因此这意味着 Obec
  • 数据表“footerCallback”函数未在页脚中显示结果

    我尝试获取每列的总和并将结果显示在页脚中 我在用着 页脚回调 https datatables net reference option footerCallbackDatatables提供的功能 但是它在页脚中没有显示任何内容 数据表解释
  • 模型不是 AngularJS 中输入的日期对象

    使用 AngularJS 我试图使用输入显示日期type date
  • AngularJS:在部分视图出现之前触发 $viewContentLoaded

    对于部分视图 我想做一些我通常会做的 JavaScript 事情 document ready function 例如将 venet 侦听器绑定到元素 我知道这对于 AngularJS 和加载到 根 视图中的部分视图不起作用 因此 我向控制
  • 添加选项以选择框而不用 Internet Explorer 关闭该框?

    我正在尝试构建一个包含多个下拉选择框的网页 这些下拉选择框在首次打开时异步加载其选项 这在 Firefox 下工作得很好 但在 Internet Explorer 下则不然 下面是我想要实现的目标的一个小例子 基本上 有一个选择框 ID 为
  • 如何从 Firebase 同步检索数据?

    我有两个集合 即用户和问题 根据使用 userId 登录的用户 我检索currQuestion价值来自users收藏 基于currQuestion值 我需要检索question来自 Firebase 的文档Questions收藏 我使用下面
  • 更改特定字符串的颜色

    有谁知道如果将特定单词输入文本区域 我如何更改它的颜色 例如 如果用户输入 你好我的朋友 它会动态地将 你好 更改为绿色 在google上花了很多时间 找不到任何相关的东西 谢谢 textareas 的设计目的不是选择性着色
  • 使用 javascript 调整图像大小以在画布 createPattern 中使用

    我见过一些关于如何调整图像大小的技巧 在 IMG 标签内使用 但我想在里面有一个图像变量 一个 Javascript 调整它的大小 然后使用 a 中的图像 context createPattern 图像 重复 我还没有找到任何提示 关于如
  • 大型应用的回流/布局性能

    我正在使用 GWT 构建一个 HTML 应用程序 其性能总体上是正确的 有时 它会加载 DOM 中的许多对象 并且应用程序会变得很慢 我使用 Chrome 开发者工具分析器来查看时间花在哪里 在 Chrome 下 一旦应用程序被编译 即没有
  • javascript/jquery 禁用点击提交按钮,防止重复提交

    所以我的提交按钮如下所示 a href img src images user create product png border 0 a 当我双击它时 显然会双重提交 问题是 我将信息保存在数据库中 因此那里会有重复的信息 我不想那样 这
  • d3力定向布局-链接距离优先

    在 d3 中使用力导向布局 如何使链接距离成为优先事项 同时仍然保持良好的图形布局 如果我指定动态链接距离 但保留默认费用 则我的图形距离会因费用函数而发生一些变形 并且不再是准确的距离 但是 如果我删除电荷 图表将如下所示 任何建议表示赞
  • 从未使用 mimeType 初始化的 MediaRecorder 获取 mimeType

    我正在使用 MediaRecorder API 在页面上录制一些媒体 在我的 MediaRecorder 初始化中 我没有指定内容类型 因为我不需要任何特别的内容 浏览器可以选择它想要的 var mediaRecorder new Medi
  • 在多个数组中搜索字符串,然后设置 var - jQuery

    我正在寻找基于字符串存在于哪个数组中设置一个变量 例如 var primary red blue yellow var secondary orange purple green 然后检查 purple 并返回它在 secondary 数组
  • window.open 使用 css 样式

    我想设计我的 window open 目前 我的网页上有一些项目由于解析了某个类而打开 然后在新窗口中打开指定的文本 我想更改字体大小 字体和填充等 这是我的 JavaScript 代码
  • ES6 Reflect API 的好处

    我一直在努力升级一些代码以使用 ES6 语法 我有以下代码行 delete this foo 我的 linter 提出了使用建议 Reflect deleteProperty this foo 您可以找到该方法的文档here https d
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲

随机推荐

  • Firestore PERMISSION_DENIED

    当我在 macOS 上编写 flutter 应用程序时遇到这个问题 相同的基本代码在我的 Windows 电脑中工作 但在 macOS 中不起作用 正如您在我的日志中看到的 应用程序已连接 但我仍然无法对我的 Firestore 数据库发出
  • iPhone DropBox API:如何加载文件?

    关于 dropBox 集成到 iPhone 应用程序中的一个非常基本的问题 我按照 DropBoxSDK 的设置进行操作 一切正常 我可以登录我的帐户并将其链接 所以我正确地设置了一切 现在我想用它简单地从 dropBox 加载文件并再次保
  • JSF 错误消息和程序卡住。 JSON 解析错误和 primefaces

    我在facelets中有以下形式
  • 使用Java DSL的Camel CXF POJO模式

    我有一个预先存在的 Web 服务 连接 SOAP 如果可能的话 我想在不使用 Swing 框架的情况下进行调用 我遵循接触优先开发 使用 cxf wsdl2java 工具生成我的 java 文件 我希望从 java 对象中提取用户名和密码并
  • 从 C# 创建 COM 索引属性?

    我正在尝试用新的 net dll 来模仿旧的 vb6 dll 模仿必须是完美的 以便调用者不知道他们正在使用新的 dll 不过我有一个好奇心 在 VB6 中 对象库中有以下内容 Property BankList Index As Long
  • std::bad_Optional_access 是针对异常的小犯罪吗?

    If std optional s value 成员函数被调用时optional没有初始化实际值 astd bad optional access被抛出 因为它直接源自std exception 你需要catch std bad optio
  • Java 泛型和接口

    有这样的设计 interface Foo
  • 如何向 iPhone 应用程序添加注销功能?

    我有一个具有以下布局的应用程序 当您打开应用程序时 您会看到登录屏幕 您登录后会看到一个包含 3 个选项卡的选项卡栏 登录视图在选项卡栏的appdelegate中显示为presentModalView 在第三个选项卡中有一个注销按钮 我希望
  • Python ctypes:复制结构的内容

    我想用 ctypes 在 Python 中模仿一段 C 代码 代码如下 typedef struct int x int y point void copy point point a point b a b 在 ctypes 中不可能执行
  • __init__() 缺少 1 个必需的位置参数

    我正在努力学习Python 这是一个非常简单的代码 我在这里想做的就是调用类的构造函数 初始化一些变量并打印该变量 但它给了我一个错误 missing 1 required positional argument class DHT def
  • 在 Mac OS 中使用 JAVA 注册表

    我写了一个Java桌面应用程序在Windows正在使用的平台Windows注册表保存应用程序信息 例如应用程序位置 时间段 例如最多 30 天的免费试用 等 现在 我想创建相同的java应用程序来运行Mac OS 虽然大多数java代码是相
  • 为什么一个文件对象刷新,而另一个文件对象不刷新?

    我想要一个在写入数据时直接刷新到文件的文件对象 并写道 class FlushingFileObject file def write self args kwargs return val file write self args kwa
  • 通过点击铅笔调用监听器(primefaces 2.2.1 rowEditor)

    在 rowEditor 上单击铅笔后如何调用侦听器 我想从 dataTable 中准备文本进行编辑 清除制表符和回车符的 html 标签 你有什么想法 谢谢 实际上 数据表中没有铅笔事件 如果你想在铅笔点击后调用监听器 你可以这样做 将 r
  • JPA (Hibernate) + Spring:处理唯一约束违规

    我有一个具有唯一字段的实体 A 该字段基本上定义了该实体 这意味着它是相等的 那么实体也完全相同 第二点是 如果违反该约束 那么绝不是例外 这意味着完全可以预期用户会尝试输入重复项 如果出现重复 应用程序应该默默地选择已经存在的实体 我现在
  • 通过名称或索引引用列的函数

    我希望能够在一个向量中按名称和索引引用列 作为示例 我仅指定 编辑 我更改了原始向量的顺序 因为我希望顺序无关紧要 columns lt c 1 7 j 8 i 然后我想检索索引 1 到 9 的名称并将它们添加到向量中 在正确的位置 我有一
  • Eclipse 写入控制台

    在 Eclipse 中 如何将调试语句写入控制台窗口 我试过 System out print urls System out println urls Log d tag urls 但我没有看到任何地方显示的值 Thanks 创建一个控制
  • 如何从命令行覆盖 protractor.conf.js 值?

    我目前有量角器设置可以在我们的集成服务器上运行 在 protractor conf js 文件中我有以下内容 multiCapabilities browserName firefox platform MAC browserName ch
  • 检查函数是否返回 true 以执行另一个函数

    我用 JS 编写了一个表单验证 以 return true 结尾 function check validation code return true 我想要的是 需要检查 check 函数是否返回 true 我想执行另一个函数 我尝试过的
  • 如何在 Jinja2 上解压多个变量

    我正在尝试在 jinja 模板引擎上解压多个变量 我怎样才能实现这个目标 我正在努力实现这样的目标 for item1 item2 item3 in items div class row div class four columns im
  • 如何检测文本区域的任何更改?

    我目前已将我的文本区域绑定到几个似乎有效的事件 然而 问题是事件重叠并触发多次 这反过来又使性能降低了太多 我想要做的几乎是捕获文本区域的任何更改 单击 粘贴 keyup keydown 右键单击上下文菜单编辑 右键单击 剪切 删除 粘贴