1

関数を呼び出す必要があります:

  1. キーが押されているときは毎秒(たとえば、5秒間押し続けると、毎秒5回発射されます)。

  2. ユーザーがキー(keyup)を離したとき、および1秒未満が経過したとき。

イベントは、テキスト入力ではなく、ドキュメントにバインドする必要があります。

2番目のステートメント「kinda」が機能する場合、最初に問題が発生します。一部のブラウザーでkeypressイベントが機能せず、keydownが常にイベントを発生させるためです。

var interval;
$(document).on('keypress', function(e) {
    console.log('keypress');

    interval = setInterval(function() {
        doSomething(e.keyCode);
    }, 1000);

}).on('keyup', function(e) {
    console.log('keyup');

    if(interval === 0) {
        doSomething(e.keyCode);
    }
    clearInterval(interval);
    interval = 0;
});


function doSomething(keyCode) {
     console.log(keyCode);
}

jsFiddle: http: //jsfiddle.net/kWFUA/

助けてくれてありがとう!

4

1 に答える 1

2

フィドルを更新しましたhttp://jsfiddle.net/kWFUA/3/

var interval;
var called = false;

$(document).on('keydown', function(e) {
    if(interval == null) {
        console.log('keydown');
        called = false;
        interval = setInterval(function() {
            doSomething(e.keyCode);
            called = true;
        }, 1000);
    }

}).on('keyup', function(e) {
    console.log('keyup');
    clearInterval(interval); 
    interval = null;
    if(!called)
        doSomething(e.keyCode);
});

function doSomething(keyCode) {
     console.log(keyCode);
}
于 2012-10-14T15:26:18.840 に答える