div上的jQuery-keydown()在Firefox中不起作用

div上的jQuery-keydown()在Firefox中不起作用,jquery,internet-explorer,firefox,events,keydown,Jquery,Internet Explorer,Firefox,Events,Keydown,我有下面的示例代码,当div处于焦点并且按下一个键时,应该会弹出一个警报。这正是我在IE7中所期望的,但在Firefox 3.5.5中却没有。我做错了什么 <html> <head> <title>JS test</title> <script type="text/javascript" src="jquery-1.3.2.min.js"></script> <script type="tex

我有下面的示例代码,当div处于焦点并且按下一个键时,应该会弹出一个警报。这正是我在IE7中所期望的,但在Firefox 3.5.5中却没有。我做错了什么

<html>
<head>
    <title>JS test</title>
    <script type="text/javascript" src="jquery-1.3.2.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $("#testdiv").keydown(function(event) {
                alert("Pressed " + event.keyCode);
            });
        });
    </script>    
    <style type="text/css">
        #testdiv
        {
            width: 50;
            height: 50;
            background-color: red;
        }
    </style>
</head>
<body>
    <div id="testdiv"></div>
</body>
</html>

JS测试
$(文档).ready(函数(){
$(“#testdiv”).keydown(函数(事件){
警报(“按下”+事件键代码);
});
});
#testdiv
{
宽度:50;
身高:50;
背景色:红色;
}

EDIT:我刚刚尝试用
keypress
keypup
替换
keydown
,但这些都不起作用。顺便说一句,我还确保关闭了“键入时查找”设置,以防万一。

我不认为这会起作用,因为div不应该接收这样的关键事件。如果您在该div中放置了一个按钮,并且用户在输入本身中按下了一个键,则事件将冒泡到该div并运行您的函数。我不是100%确定你的项目在做什么,所以我不知道如何给你更多的建议,但即使我不应该这样做,我还是有点惊讶IE在一个div上启动了一个keydown事件。

你需要给div一个tabindex,这样它才能获得关注

<div id="testdiv" tabindex="0"></div>

我在Firefox中实现了上述功能,如下所示:

$('#domainTableDiv').keydown(function(e) {
        alert(e.type + " button(" + e.which + ") ctrl(" + e.metaKey + ") alt(" + e.altKey + ") shift(" + e.shiftKey + ")" );
    });

$('#domainTableDiv').focus();

一旦DIV明确关注它,Firefox 4.0.1中的关键事件就可以正常启动了。我无法使用jquery的最新CDN在Firefox 5中找到这些答案。我需要知道div的一个孩子是否有关键事件,所以我求助于以下方法:

$(document).keypress(function(e){
    if(!$(e.target).parents().is("#testdiv")) return;
    /* do child-of-div specific code here */
}
如果目标是当前div(并且它有焦点),我想您可以这样做:

$(document).keypress(function(e){
    if(!$(e.target).is("#testdiv")) return;
    /* do div specific code here */
}
$('#tbl tbody').attr("tabindex", 1).focus();
$('#tbl tbody').keydown(function (event) {
    ...
});

这是因为jQuery版本。“尝试作为源文件”

我们也可以使用类似以下内容:

$(document).keypress(function(e){
    if(!$(e.target).is("#testdiv")) return;
    /* do div specific code here */
}
$('#tbl tbody').attr("tabindex", 1).focus();
$('#tbl tbody').keydown(function (event) {
    ...
});
你可以从这里在线查询 源代码

JS测试
$(文档).ready(函数(){
$(“#testdiv”).keydown(函数(事件){
警报(“按下”+事件键代码);
});
});
#testdiv
{
宽度:50px;
高度:50px;
背景色:红色;
}

你试过使用按键或键控键吗?@Matt:刚刚试过并更新了问题,谢谢。
也没有触发
键控事件,这让我很头疼……太棒了!非常感谢你!只需一个
tabindex
就可以节省我的时间。回答得很好。。我花了几个小时试图解决这个问题,直到我找到了答案。。。竖起大拇指…@RichardGarside天哪,非常感谢你,我挣扎了几个小时才找到你的答案。如果你要去东京-让我知道,要买一只熊;)@RichardGarside嗨,伙计,我现在在伊斯坦布尔,所以如果你在这里-让我知道,啤酒在等你:))