如果按下任何字母数字字符或符号,则滚动

时间:2013-10-05 13:27:45

标签: javascript jquery regex

我正在编写一个滚动容器的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等......

代码出了什么问题?

1 个答案:

答案 0 :(得分: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版本不起作用。虽然你看,你可以找到垫片。 Here is an example


您可以执行此操作,但如果用户长时间按住某个键(直到用户释放该键),它就不会立即滚动。

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