- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个使用 jqlite 的 Angular 指令,我想绑定(bind)一个按键、按下和粘贴事件来更新指令上的选项。
我绑定(bind)到粘贴、按键和按键事件使用:
input.bind("paste.elementClass", updateOptions);
input.bind("keypress.elementClass", updateOptions);
// keypress does not fire if the backspace/delete button is pressed. This keydown listener triggers the
// keypress event if backspace/delete is pressed. Didn't use keydown listener instead of keypress because
// keydown did not register if multiple buttons are pressed (shift + d). The keyup event choked
// if a button was pressed and held for longer than the model debounce time.
input.bind("keydown.elementClass", function() {
// handle this event differently
});
...
function updateOptions(event) {
var key = event.which || event.keyCode;
if (event.type === 'paste') {
scope.internalModel.searchText = event.originalEvent.clipboardData.getData('text');
} else {
scope.internalModel.searchText = key ? String.fromCharCode(key) : "";
}
scope.onModelChange(scope.internalModel);
}
我测试了我的代码,这个解决方案在 Chrome 中运行良好。但是,当我在 Firefox 和 Safari 中测试它时,它失败了。看来,当我尝试从剪贴板粘贴时,只会调用附加到按键事件的函数。如果我注释掉我对按键的绑定(bind),那么将调用附加到 keydown 的函数。最后,如果我注释掉 keypress 和 keydown,那么绑定(bind)到 paste 的函数将被调用并正常工作。
当从剪贴板粘贴时,是否有办法防止 keydown 和 keypress 事件在 Firefox 和 safari 上被触发/调用,并且仍然分别检测 keydown 和 keypress?
更新
我已经尝试使用 ng-paste、ng-keypress 和 ng-keydown 来找到这个问题的答案,但仍然没有运气。我试过 element.addEventListener 用于粘贴、按键和按键。我用过 jQuery 的 .on 和 .bind,但运气不好。
我创建了一个重现该问题的 plunkr。
http://plnkr.co/edit/EI0otzqCZrYWCA8GgeNY?p=preview
最终更新
我找到了下面列出的解决方案,而不是使用 keypress 我使用 keyup 和 keydown 事件来检测何时按下 control 或 meta(super/windows) 键。然后我过滤掉必要的关键事件。我的最终解决方案是使用 jQuery 来绑定(bind)和取消绑定(bind)事件。
参见最终解决方案 http://plnkr.co/edit/EI0otzqCZrYWCA8GgeNY?p=preview
最佳答案
好的,我想我找到了一些关于这个问题的信息。与 keydown
事件相比,keypress
应该仅在您按下显示字符的键时触发:字母、数字等(可打印键)。但问题是 keypress
事件没有官方规范,因此浏览器的实现方式不同。例如,在 Chrome 中 cmd + v
命令不会触发 keypress
事件,但在 Firefox 和 Safari 中它会(就像你只按下 v
键),它会以某种方式破坏 paste
命令,所以它不会触发。
如果您尝试通过上下文菜单将文本粘贴到您的输入中,您会发现它工作正常。
所以我想建议是使用 keydown
/keyup
事件而不是 keypress
如果你还想听 paste
事件。
一些相关问题:
关于javascript - keypress 和 keydown 优先于 Firefox 和 Safari 中的粘贴事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42706617/
我试图在用户开始输入后将类(.active)添加到文本字段。我让它在某种程度上与以下代码一起工作,但由于某种原因,当用户开始键入时,.active 类不会立即应用,它仅在键入第二个字母后才应用。有什么
在 Mac 的 Chrome、Safari 和 Opera 上,正文实时绑定(bind)和文档 keydown 绑定(bind)均有效 $(document).ready(function() {
我使用 fancybox 来弹出表单,我的客户不希望背景应该滚动 Firefox 仍然允许用户通过箭头键滚动背景。 现在我阻止用户按箭头键直到弹出完整文档,但它也会停止我的表单中的相同按键。 这些选项
我有 UserControl 并面临 KeyDown 事件的问题。我的 UserControls 将显示反对撤销 Windows 窗体 keydown 事件,如下所示: 用户控件的事件: privat
我发现了很多相关问题(这里和其他地方),但还没有具体找到这个问题。 我正在尝试监听箭头键 (37-40) 的按键事件,但是当以特定顺序使用箭头键时,后续箭头不会生成“按键”事件。 例子: http:/
JQuery 的“:not”选择器不会阻止要排除的类(装饰元素)触发 .keydown 事件。为什么? 在以下代码中,当我按下 .newOwnerEntryInput 字段中的某个键时,我希望仅看到“
在测试环境中,将vue-test-utils更新到1.0.0-beta.26或更高版本后,keydown事件不再由keyCode触发,例如: Vue 脚本 public onKeydown
据我了解,当按下键盘按钮时,它应该为具有焦点的控件调用 KeyDown 事件。然后,父控件的 KeyDown,依此类推,直到到达主窗体。除非 - 沿着链条,其中一个 EventHandlers 做了:
在 IE11 中,触发 keydown 事件有一种奇怪的行为。 请使用以下网址重现: http://jsfiddle.net/marbug/79dz6ajz/ 有一个带有两个输入字段的表单:
我有一个带有 3 个 NSTableViews 和 1 个 NSCollectionView 的窗口。集合 View 显示图像。我希望能够选择其中一个图像并使用键盘删除键将其删除,但我无法让 coll
我有一个WinForms表单(C#/。Net),它包含一个PictureBox,MenuStrip,Panel和两个Button控件。 我需要为整个窗口的箭头键检测KeyDown事件;即,当窗口位于前
我在使用 JQuery DataTable 捕获 keydown 事件时遇到问题。我的目标是允许用户使用箭头键导航表的行。因此,当用户按下箭头键时,我想捕获 keydown 事件并移动表的选定行(这是
我查看了一些相关问题,但没有一个能帮助我解决我的问题。 我有自己的从头开始构建的动态数据网格表单,可以在其中添加/删除数据行和字段列等。我正在尝试提高可用性,以便按回车键将创建一个新的字段列并且给予重
我试图通过按下来执行特定操作,例如空格键(任何地方)。在我的代码中,我有 AcceptFirstResponder 方法和 keyDown 方法,但我没有收到 NSLog 消息 代码如下: - (BO
我正在开发一个 Mozilla 插件,它将左侧的数字键替换为 Shift + 等效键。例如,如果您按 1,它将被替换为 '!'自动(特别适用于在线编译器)。这是代码 document.activeEl
我的表单具有以下语义结构 Sign Up Username
我正在尝试创建一个对象来处理用户的键盘输入。 var control = new Control (); function Control () { this.w = 0; this.
我编写了一个简单的代码,当按下某个键时,它应该改变框的可见性,但是出了问题,因为无论按下哪个按钮,它总是说它是错误的。 这应该只有在按下“f”键时才有效,现在根本不起作用...... const br
在我的代码中,用于提醒每个 keydown 事件上提交的所有文本区域行,但循环不起作用 function limitTextareaLine(e) { var textArray = $(this
我有一个用于捕获和注册箭头键输入的系统。它一直有效到一定程度。只要按下两个或更少的键,它就会正确记录同时按下多个键的情况。如果第三个或第四个按钮同时按下,它将停止触发按键事件。请参阅this jsFi
我是一名优秀的程序员,十分优秀!