0

コンテナをスクロールするJSコードを書いています。任意の英数字または記号が押されます。

これは私が思いついたものです:

var $q = $('input#q');
$q.on('keydown', function (e) {
    var reMatch = /[!-~]/.exec(e.which);
    if (typeof reMatch != 'null' && reMatch.length > 0) {
        $('#container').animate({scrollTop: 410}, 500);
        $(this).off('keydown');
    }
}).focus();

しかし、これはシフト、タブ、エンターなどのすべてのキーに対して実行されます...

コードの何が問題になっていますか?

4

1 に答える 1

1

e.これは、押されたキーの数値表現を提供します。数字キーは 48 ~ 57 (またはキーパッドでは 96 ~ 105) で表され、文字は 65 ~ 90 で表されます。

これを試して:

var $q = $('input#q');
$q.on('keydown', function (e) {
    var val = e.which;
    var num = (val > 47 && val < 58 || val > 95 && val < 106);
    var letter = (val > 64 && val < 91);
    if (num || letter) {
        $('#container').animate({scrollTop: 410}, 500);
        $(this).off('keydown');
    }
}).focus();

テキストフィールドに入力を作成するものなら何でも動作するようにこれを行うことができます:

var $q = $('input#q');
$q.on('input', function (e) {
    $('#container').animate({
        scrollTop: 410
    }, 500);
    $(this).off('input');
}).focus();

ただし、これは 9 未満の IE バージョンでは機能しません。ここに例があります


これを行うことはできますが、ユーザーがキーを長時間 (ユーザーがキーを離すまで) 押し続けていると、すぐにはスクロールしません。

var $q = $('input#q');
var qval = $q.val()
$q.on('keyup', function (e) {
    if(qval != $q.val()) {
        $('#container').animate({scrollTop: 410}, 500);
        $(this).off('keyup');
    }
}).focus();
于 2013-10-05T13:46:02.423 に答える