将keydown事件传递给另一个文本框

时间:2011-03-17 16:08:10

标签: javascript jquery events textbox keydown

我正在尝试将keydown事件从一个文本框传递到另一个文本框。我的意思是,例如,如果您按下'a'键,某些代码应该模拟该键在第二个文本框中被按下。

我不想只将第一个文本框的值复制到第二个 - 它应该基于每个键,所以说。假设第一个文本框包含abc,第二个文本框为空,当您按下文本框1中的“d”键时,文本框2应仅包含d

我已经尝试的是(http://jsfiddle.net/E5qyr/1/):

$('#t1').keydown(function(e) {
    $('#t2').keydown(e);
});

但这不起作用(我想我的想法太简单了)。我知道我可以通过查看e.keyCode来附加按下的角色,但“退格”等也必须正常工作。

是否有人有想法将keydown事件从一个文本框传递到另一个文本框?

3 个答案:

答案 0 :(得分:1)

Textarea元素没有自动安装侦听器,因此触发#t2的'keydown'事件不会显示响应。你想要的只是添加你从#t1 keydown事件(你正在听的)中获得的文本,并将其附加到你的#t2。

更新了对退格的支持。其他代码here

示例:

$('#t1').keydown(function(e) {
    if (e.which == 8) { //Backspace
      this.text(this.val().substr(0, this.val().length - 1));
    } else {
      $('#t2').append($('#t1').val());
      this.empty();
    }
});

答案 1 :(得分:0)

为什么不替换onkeydown上的文本框值?似乎只需要txt1.text = txt2.text而不是在txt1中附加现有字符串就更简单了。

答案 2 :(得分:0)

这样的东西?

$('#t1').keydown(function(e) {
    var char = (e.keyCode == 8) ? '' : String.fromCharCode(e.keyCode + (e.shiftKey ? 0 : 32));
    $('#t2').val(char);
});