Javascript 如果按下任何字母数字字符或符号,请滚动
我正在编写一个JS代码,当按下任何字母数字字符或符号时,它会滚动容器 这就是我想到的: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
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();