将keydown传递给另一个元素



我想将keydown事件传递给另一个元素。一路上我发现:

$('input').keydown(function(e) {
    $('textarea').keydown()[0].focus();
});

有效并且:

$('input').keydown(function(e) {
    setTimeout(function() { $('textarea').keydown()[0].focus(); }, 0);
});​

不起作用。至少在Chrome中是这样。

无论如何,我想用第二种方法来做这件事,因为我希望它首先能够在选择了文本的输入上做ctrl+cctrl+x,然后跳到文本区域。

这是一个演示,看看我的意思

为什么第二种方法不起作用?还有什么方法可以做到这一点吗?

按预期工作。首先,您的代码有一半是不相关的p

$('inout').keydown(function(e) {
  $('textarea').keydown()[0].focus();
});

相当于

$('inout').keydown(function(e) {
  $('textarea').keydown(); // doesn't do anything sensible
  $('textarea')[0].focus();
});

并且它在密钥处理程序解析之前将焦点转移到CCD_ 3。密钥最终在textarea中。而CCD_ 5甚至看不到它(假设代码说的是input而不是inout)。

第二个例子:

$('input').keydown(function(e) {
  setTimeout(function() { $('textarea').keydown()[0].focus(); }, 0);
});​

相当于:

$('input').keydown(function(e) {
  setTimeout(function() {
    $('textarea').keydown(); // doesn't do anything sensible
    $('textarea')[0].focus();
  }, 0);
});​

因此,由于超时,首先keydown事件完成,密钥被接受为input的输入,然后调用延迟函数并更改焦点。没有发生任何进一步的事情。

我不知道如何"重复"或"重新思考"键盘事件,以防您想在inputtextarea中获得相同的按键(如果这是您想要的;我不能100%确定您想要什么)。

EDIT:好的:如果它只是Ctrl/Shift/另一个修改键,则返回true,以便默认处理程序拾取它。如果是Ctrl-C(即设置了ctrlKeyC键(Mac上的metaKey),则执行超时操作(因此inputfocus之前捕获它);如果没有,请立即移动焦点(以便textarea捕捉到它)。这不是小事,我现在想不出更好的方法了。

setTimeout延迟传递足够的时间

$('input').keydown(function(e) {
    setTimeout(function() { $('textarea').keydown()[0].focus(); }, 700); // 0.7 seconds
});

textarea上的keydown事件没有意义,可以移除;

$('input').keydown(function(e) {
    setTimeout(function() { $('textarea').focus(); }, 700); // 0.7 seconds
});

最新更新