Javascript 将全局键盘事件传递到文本字段

Javascript 将全局键盘事件传递到文本字段,javascript,jquery,Javascript,Jquery,有没有办法将键盘事件重播到文本字段,并使接收输入字段将该字符添加到文本中?因为我不能去上班 假设我按下键盘上的a,body上的全局处理程序就会捕捉到它。现在我想把它重播到给定的文本字段。因此,如果用户在键盘上按a,它将显示在文本字段中,完全基于事件。输入时会弹出事件,但未输入字符。这可能吗?我希望避免使用.val()操作输入文本 例如: $('body')。打开('keyup',eKeyUp); $('#mancineni')。on('keyup',ekeyup输入); 函数eKeyUp(e)

有没有办法将键盘事件重播到文本字段,并使接收输入字段将该字符添加到文本中?因为我不能去上班

假设我按下键盘上的
a
,body上的全局处理程序就会捕捉到它。现在我想把它重播到给定的文本字段。因此,如果用户在键盘上按
a
,它将显示在文本字段中,完全基于事件。输入时会弹出事件,但未输入字符。这可能吗?我希望避免使用
.val()
操作输入文本

例如:

$('body')。打开('keyup',eKeyUp);
$('#mancineni')。on('keyup',ekeyup输入);
函数eKeyUp(e)
{
$e=$.Event('keyup');
$e.which=e.which;
$e.charCode=e.charCode;
$e.keyCode=e.keyCode;
$e.shiftKey=e.shiftKey;
$e.key=e.key;
$('#mancineni')。触发器($e);
//$(#mancineni').focus();
}
函数eKeyUpINPUT(e)
{
console.log('g',e)
e、 停止传播();
}

感觉你让这件事变得比实际困难得多。只需将
输入
的值设置为
event.key
,同时在
body
级别处理它。不确定为什么需要避免这样做,也许你可以解释一下

$('body')。打开('keyup',eKeyUp);
$('#mancineni')。on('keyup',ekeyup输入);
函数eKeyUp(e){
$('#mancinini').val(event.key);
}
函数eKeyUpINPUT(e){
e、 停止传播();
}

感觉你让这件事变得比实际困难得多。只需将
输入
的值设置为
event.key
,同时在
body
级别处理它。不确定为什么需要避免这样做,也许你可以解释一下

$('body')。打开('keyup',eKeyUp);
$('#mancineni')。on('keyup',ekeyup输入);
函数eKeyUp(e){
$('#mancinini').val(event.key);
}
函数eKeyUpINPUT(e){
e、 停止传播();
}


只需将文本字段的值设置为
event.key
,同时在
body
级别对其进行处理。我觉得如果您的输入位于
body
标记内,则此代码将带您进入无限循环的事件。您应该将字符附加到输入字段,否则,设置一个全局布尔值,如果
e.target
已经是输入,则不会触发输入上的事件:)只需将文本字段的值设置为
event.key
,同时在
body
级别处理它。我觉得如果您的输入在
body
标记内,则此代码将带您进入无限循环的事件。您应该将字符附加到输入字段,或者,否则,设置一个全局布尔值,如果
e.target
已经是输入,则该布尔值不会触发输入上的事件:)我很好奇/困惑,为什么在输入字段上实际触发同一事件时不重播它…@AndrásAndrás我不知道您的意思是什么“重播”。只有一个事件正在从其源元素传播(冒泡)到
文档
。您可以拦截(句柄)它在这条链上的任何地方都会触发,但这不应该使事件再次触发。@AndrásAndrás也许你一直认为
keyup
事件和
input
字段有某种内在的关系,而它们没有。键盘事件在
div
上的有效性与在
input
上的有效性一样,只是
input
提供了一个显示击键的UI,而
div
则没有。是的,我知道这一点,但我想知道为什么在模拟按键{press,down,up}事件时,字符没有出现在输入中。@AndrásAndrás,因为它没有在表单字段上有机地发生。同样,没有“模拟”或“重播”,这只是一个事件,如果它不是源于表单字段,那么在非表单字段处理它时,为什么您希望表单字段会受到影响?这与我的拳头遇到“拳头”没有什么不同“事件。如果我的拳头正好碰到墙,就会痛。如果打孔事件由枕头对象处理,则不会有疼痛。你期望UI元素的副作用以某种方式决定非UI元素上发生的事情。我很好奇/困惑,为什么当同一事件在输入字段上被触发时,它不被重播…@AndrásAndrás我不知道你所说的“重播”是什么意思。只有一个事件正在从其源元素传播(冒泡)到
文档
。您可以在该链的任何位置拦截(处理)它,但这不应使事件再次触发。@AndrásAndrás您可能认为
键控
事件和
输入
字段有某种内在的关系,而它们没有这种关系。键盘事件在
div
上和在
input
上一样有效,只是
input
提供了一个显示击键的界面,而
div
没有。是的,我知道这一点,但我想知道为什么当按下键{按下,向下,向上}时,字符没有出现在输入中事件是模拟的。@AndrásAndrás,因为它不是在表单字段中有机地发生的。同样,没有“模拟”或“重播”,只有一个事件,如果它不是源于表单字段,那么当您在非表单字段处理表单字段时,为什么希望表单字段受到影响?这和我的拳头遇到“拳头”事件没有什么不同。如果我的拳头正好碰到墙,就会痛。如果打孔事件由枕头对象处理,则不会有疼痛。您期望UI元素的副作用以某种方式指示在非UI元素上发生的事情。