我有一个输入框,就像搜索一样(类似于facebook)。 我在按键事件上使用jquery工作正常。 问题是我无法使用箭头键向下滚动结果集,每次按下其中一个结果时,搜索结果将被重新生成。 因此可以忽略箭头键/ shift / tab等。
$("#search-form .search-terms").on("keypress", function(){
$("#search-items #autocom").fadeIn();
});
由于
答案 0 :(得分:28)
您需要过滤掉箭头键代码(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();
});
<强> Click for a list of key codes 强>
keypress
/ keyup
/ keydown
上的文档说明:
请注意,keydown和keyup提供一个代码,指示按下哪个键,而keypress指示输入了哪个字符。例如,小写的“a”将通过keydown和keyup报告为65,但按keypress报告为97。所有事件都将大写的“A”报告为65。由于这种区别,当捕获特殊键击如箭头键时,.keydown()或.keyup()是更好的选择。
keypress
事件适用于几乎所有情况,但使用keyup
或keydown
是谨慎的,因为有些浏览器(我认为某些旧版本的Firefox)请勿使用keypress
事件检测某些键,例如箭头键。
答案 1 :(得分:1)
我还要提出,您应该忽略不应直接导致新查询的其他键。例如,$query = mysqli_query($link, "SELECT * from packages WHERE trackingNumber LIKE '%$searchq%'");
while($row = mysqli_fetch_assoc($query)) {
$shipper = $row['sendName'];
$originCity = $row['originCity'];
$originCountry = $row['originCountry'];
}
$sql = "SELECT * from history WHERE trackingNumber LIKE '%$searchq%' ORDER
BY id ASC";
while($row = mysqli_fetch_assoc($sql)){
echo "<tr>";
echo "<td>" . $row['date'] . "</td>";
echo "<td>" . $row['time']. "</td>";
echo "<td>" . $row['city']. "</td>";
echo "<td>" . $row['country']. "</td>";
echo "<td>" . $row['activity']. "</td>";
echo "</tr>";
}
echo "</table>";
,shift
和scroll-lock
等关键字。在咨询了@theyetiman链接到的keycode list之后,我想出了if语句来忽略所有无关紧要的键(请注意end
与keypress
的交换以允许捕获像keyup
)这样的重要键:
backspace
答案 2 :(得分:0)
$(".search-terms").live('keydown',function(event){
if(event.which>=37 && event.which<=40)
{
reutrn;
}
答案 3 :(得分:0)
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;
}
});
}