问答详情
源自:4-1 jQuery键盘事件之keydown()与keyup()事件

为什么监听keydown实例中, 按下下一个键, 才会出现前一个键的值?

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title></title>
    <style>
    .left div,
    .right div {
        width: 500px;
        height: 50px;
        padding: 5px;
        margin: 5px;
        float: left;
        border: 1px solid #ccc;
    }
    
    .left div {
        background: #bbffaa;
    }
    em{
        font-weight: 900;
        color: red;
    }
    </style>
   <script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script>
</head>

<body>
    <h2>keydown()与keyup()事件</h2>
    <div class="left">
        <h4>测试一</h4>
        <div class="aaron">监听keydown输入:
            <input class="target1" type="text" value="" /><br />
            按下显示输入的值:<em></em>
        </div>
        <h4>测试二</h4>
        <div class="aaron">监听keyup输入: 
            <input class="target2" type="text" value="" /><br />
            松手显示输入的值:<em></em>
        </div>
    </div>

    <script type="text/javascript">
    //监听键盘按键
    //获取输入的值
    $('.target1').keydown(function(e) {
        $("em:first").text(e.target.value)
    });

    //监听键盘按键
    //获取输入的值
    $('.target2').keyup(function(e) {
        $("em:last").text(e.target.value)
    });

    </script>

</body>

</html>


提问者:AL_Cherish 2016-11-04 15:19

个回答

  • JoKer49
    2017-04-06 21:16:27

    顺序:第一次keydown  input的值还是空  而此时获取input的结果为空  然后值跑到input框里  然后keyup

    第二次 keydown  input的值为第一次输入的字符串  获取也是第一次的   然后第二次输入的跑到input框里面  然后keyup

    以此类推

  • 慕粉wz
    2016-11-24 15:20:01

    楼上正解

  • AL_Cherish
    2016-11-04 15:27:28

    在下一节找到的答案: 

    在input元素上绑定keydown事件会发现一个问题:

    每次获取的内容都是之前输入的,当前输入的获取不到

    keydown事件触发在文字还没敲进文本框,这时如果在keydown事件中输出文本框中的文本,得到的是触发键盘事件前的文本,而keyup事件触发时整个键盘事件的操作已经完成,获得的是触发键盘事件后的文本