我有以下场景,并且下面是一个小的jQuery脚本:
我有 input
并附加了 keyup
事件
$('input').on('keyup', function(e) {
console.info(e.ctrlKey, e.metaKey, e.keyCode);
});
我们所有人都知道它的作用,它应该打印到控制台,在事件(ctrl
值)下按下boolean
键,或者是Meta键(在我的情况下,{在事件期间(另一个Command
值)和密钥代码(boolean
值)按下了{1}}键。
没什么不寻常的,但是......
按下int
键时,按下它时,command
事件会被禁止用于任何其他键。
如果按keyup
( ctrl,而不是命令),则会抛出ctrl + v
- 这很棒,true false 86
被按下ctrl
密钥已释放且keyCode为86(对于v
)并且在抛出v
之后 - 这也很好,该事件在释放false false 17
密钥后被触发。
Weel,当按ctrl
时,它只会抛出 command + v
,这意味着该事件只触发一次(当false false 91
键被释放时),而不是两次。它应该抛出command
(没有ctrl键,但是带有false true 86
的元键),然后抛出v
(释放false false 91
时)。
这是一个jQuery错误,Mac OS X限制还是我做错了什么?
如何让它发挥作用?
谢谢!
PS:我需要command
事件,因为我需要粘贴输入的文本来对其进行一些处理。我还需要keyup
,因为我需要粘贴的值:)
PS2:在Windows操作系统上,我认为它的工作正常。
答案 0 :(得分:2)
您可以使用paste
事件。
$('input').on('paste', function(e) {
setTimeout(function(){
console.log($('input').val());
}, 0);
});
setTimeout
函数是必需的,以便在调用它之前确保更新输入的值。您可以通过多种方式将this
传递给setTimeout
。
选项1 (添加到窗口对象或声明全局变量)
$('input').on('paste', function(e) {
window.input = $(this);
setTimeout(function(){
console.log(input.val());
}, 0);
});
选项2 (将变量传递给另一个函数)
$('input').on('paste', function(e) {
var input = $(this);
setTimeout(function(){
inputVal(input);
}, 0);
});
function inputVal(input){
console.log(input.val());
}