0

次のように、キーを押した後にイベントを1回トリガーし、下矢印キーが離された後にのみ別のイベントをトリガーしたいと思います。

$('body').keydown(function (e)
{
    if(e.keyCode==40)
    {
        //do something
    }
    $('body').keyup(function (d)
    {
        if(d.keyCode==40)
        {
            //do something else
        }
    }
}

このコードは部分的にしか機能しません。下矢印キーを押し続けると、キーダウンが連続してトリガーされます。

矢印キーを押したときにリフレッシュレートを変更する setInterval があります。残念ながら、この状況では setTimeOut はオプションではありません。

したがって、私のコードは次のようになります。

        clearInterval(interval);
        refresh = 100;
        interval();
4

4 に答える 4

1
$('body').keydown(function (e) {
    if(e.keyCode==40) {
        //do something
    }
    return false;
})
.keyup(function(e) {
    if(e.keyCode==40) {
        //do something else
    }
    return false;
});


$('body').on('keyup', function (e) {
    if(e.keyCode==40) {
        //do something
    }
    // after first keyup set to handle next keydown only once:
    $(this).one('keydown', function(e) {
        if(e.keyCode==40) {
            //do something else
        }
    });
});

イベントを正確にトリガーする必要があり、例のように処理しない場合は、メソッドを使用する必要があります$.trigger()

于 2012-10-21T23:10:57.767 に答える
1

キーが押されたままの間に1回だけアクションを実行したい場合は、それを追跡するだけです。

var arrowKeyDown = false;

$('body').keydown(function(e) {
    if (e.which == 40 && !arrowKeyDown) {
        arrowKeyDown = true;
        // ...
    }
});

$('body').keyup(function(e) {
    if (e.which == 40) {
        arrowKeyDown = false;
    }
});

デモ: http: //jsfiddle.net/utfwQ/

于 2012-10-21T23:16:29.540 に答える
0

完了時にキーアップリスナーを本当に削除する必要がある場合は、 http: //jsfiddle.net/CgmCT/

document.body.addEventListener('keydown', function (e) {
    if(e.keyCode === 40){
        console.log('key 40 down');
        // key down code
        document.body.addEventListener('keyup', function listener(d){
            if(d.keyCode === 40){
                document.body.removeEventListener('keyup', listener, true);
                console.log('key 40 up');
                // key up code
            }
        }, true);
    }
}, true);​
于 2012-10-21T23:17:47.290 に答える
0
$('body').keydown(function (e)
{
    console.log('down');
}​).keyup(function(e){console.log('up')});​​​​
于 2012-10-21T23:12:58.857 に答える