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

Javascript 如果按下任何字母数字字符或符号,请滚动,javascript,jquery,regex,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({scrollTo

我正在编写一个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等


代码有什么问题?

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();
但这对小于9的IE版本不起作用。虽然如果你看,你可以找到垫片


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


keydown
在用户按键时触发(在释放按键之前)
e.
是他们按下的键的数字表示,它不可能包含像
这样的字符
~
。另外,要获取
字符您必须按“Shift”键,然后按“1”,这两个键都会触发按键向下。我想你需要澄清一下你到底想发生什么。好吧,我按照你上次(删除的)评论中所说的,使用了
var-reMatch=/[!-~]/.exec(String.fromCharCode(e.which))哪个有效。忽略
shift
后,
的ascii。但是箭头键仍然会以某种方式触发滚动,有没有办法解决这个问题呢?我已经发布了一个对字母有效的答案,按数字键(包括如果按住shift键),然后按numpad数字键。这包括你要找的吗?另外,你会发现
fromCharCode(e.which)
不会返回你对许多键的期望值。。。基本上是在输入字段中插入字符吗?是的!对于输入表单,当用户开始输入时,表单应该滚动到页面顶部谢谢!但我只是好奇,为什么我上面的re-in注释与箭头键匹配?
String.fromCharCode()
在很多事情上并没有真正返回您期望的结果。如果您想查看它实际返回的内容,可以提醒它。@苏拉布,我添加了两种您可能感兴趣的解决方案。
'input'
===太棒了!!谢谢你的帮助,斯默尼<代码>输入
事件侦听器解决了所有问题。
var $q = $('input#q');
$q.on('input', function (e) {
    $('#container').animate({
        scrollTop: 410
    }, 500);
    $(this).off('input');
}).focus();
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();