keydown事件的疑惑

yr1014
  • 270

两个input框,对其中一个输入框监听keydown事件,将其值赋给给另一个框,但是值总是差一位,用keyup事件没有问题

clipboard.png

<div class="test">
    <input class="test1" type="text" name="test1">
    <input class="test2" type="text" name="test2">
</div>
<script type="text/javascript">
    var test1 = document.getElementsByClassName('test1')[0];
    var test2 = document.getElementsByClassName('test2')[0];

    test1.addEventListener('keydown', function(e) {
        test2.value = e.target.value;
    })
</script>
回复
阅读 1.8k
2 个回答

keydown事件触发在文字还没敲进文本框,这时如果在keydown事件中输出文本框中的文本,得到的是触发键盘事件前的文本,而keyup事件触发时全部键盘事件的操作已完成,获得的是触发键盘事件后的文本。关于输入框发生的事件流程依次为focus、keydown、input、keyup、change与blur。
查看了别人的文章,贴出他们的链接吧链接1链接2

你可以试一下延迟到下一轮事件循环再执行
setTimeOut(function() {test2.value = e.target.value;},0)

宣传栏