我正在编写一个滚动容器的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等......
代码出了什么问题?
答案 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();