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();

但这适用于所有键,如 shift、tab、enter 等......

代码有什么问题?

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 版本。虽然如果你看,你可以找到 shims。这是一个例子


您可以这样做,但如果用户长时间按住某个键(直到用户释放该键),它不会立即滚动。

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 回答