我有一个类似于搜索的输入框(类似于 facebook)。我在按键事件上使用 jquery,效果很好。问题是我无法使用箭头键向下滚动结果集,每次按下其中一个时,搜索结果都会重新生成。那么是否可以忽略箭头键/ shift / tab等。
$("#search-form .search-terms").on("keypress", function(){
$("#search-items #autocom").fadeIn();
});
谢谢
我有一个类似于搜索的输入框(类似于 facebook)。我在按键事件上使用 jquery,效果很好。问题是我无法使用箭头键向下滚动结果集,每次按下其中一个时,搜索结果都会重新生成。那么是否可以忽略箭头键/ shift / tab等。
$("#search-form .search-terms").on("keypress", function(){
$("#search-items #autocom").fadeIn();
});
谢谢
您需要过滤掉箭头键代码(37,38,39,40),试试这个:
请注意function(e)
代替function()
- 这允许您获取事件并因此获取关键代码。
$('#search-form .search-terms').on('keydown', function(e){
// get keycode of current keypress event
var code = (e.keyCode || e.which);
// do nothing if it's an arrow key
if(code == 37 || code == 38 || code == 39 || code == 40) {
return;
}
// do normal behaviour for any other key
$('#search-items #autocom').fadeIn();
});
来自keypress
/ keyup
/文档的注释keydown
:
请注意,keydown 和 keyup 提供了指示按下哪个键的代码,而 keypress 指示输入了哪个字符。例如,小写的“a”将被 keydown 和 keyup 报告为 65,但被 keypress 报告为 97。所有事件都将大写“A”报告为 65。由于这种区别,当捕获特殊按键(如箭头键)时,.keydown() 或 .keyup() 是更好的选择。
该keypress
事件几乎在所有情况下都有效,但谨慎使用keyup
或keydown
因为某些浏览器(我认为某些旧版本的 Firefox)没有检测到使用该事件的某些键,例如箭头键。keypress
我还提出,您应该忽略不应直接导致新查询的其他键。shift
例如,scroll-lock
和等键end
。在咨询了@theyetiman 链接到的相同键码列表后,我想出了这个 if 语句来忽略所有无关紧要的键(注意交换keypress
forkeyup
以允许捕获重要的键,例如backspace
):
$('.search-terms').on('keyup', function(ev) {
if ((ev.keyCode > = 9 && ev.keyCode <= 45) || (ev.keyCode >= 91 || ev.keyCode <= 93) || (ev.keyCode >= 112 || ev.keyCode <= 145)) {
return;
}
});
$(".search-terms").live('keydown',function(event){
if(event.which>=37 && event.which<=40)
{
reutrn;
}
if ( !Main.IsEmptyOrNull( event ) )
{
$( document ).keydown( function ( e )
{
switch ( e.which )
{
case 16:
case 17:
case 18:
case 37:
case 38:
case 39:
case 40:
break;
default:
var that = event.target;
that.rows = that.getAttribute( 'data-min-rows' ) | 0, that.rows;
that.rows = that.scrollHeight / 16 ;
break;
}
});
}