按下body键?

6
我希望在按下键盘时能够收到警报。
我已经尝试过:
$('body').live('keyup', function() {
     alert('testing');
});

但它没有起作用,可能是因为选择器的原因吗?
更新:
这是我的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>TODO supply a title</title>
        <script type="text/javascript" src="../system/media/js/jquery/jquery.js"></script>
        <script type="text/javascript">  
            $(document).ready(function() {
                $('body').live('keyup', function() {
                    alert('testing');
                });   
            });   
        </script>
    </head>
    <body>
        <p>
            TODO write content
        </p>
    </body>
</html>

当我用 keyup 替换成 mouseover 并且鼠标移到 TODO 写内容 上时,它能够正常工作,但是当我按下某个按键时没有警报。

为什么它不起作用?


你是否在鼠标位于文本框或其他输入控件内时按键? - Crescent Fresh
不..我没有任何专注的东西..只想按下一个键,它就会自动对焦并粘贴到输入区域中。如果我输入“你好”,我希望这些内容显示在输入区域中。 - ajsie
你的测试对我有效。你能否提供更多信息或演示网页? - Sean Hogan
你是在输入框里面输入吗?我刚才点击了外面然后输入了一些内容,但是没有弹出警告...只有当我在输入框内输入或者使用鼠标悬停时才有效。 - ajsie
以上代码对我有效。请确保页面具有焦点,并且没有任何东西阻止事件传播(另一个keyup事件处理程序)。 - Bryan Matthews
5个回答

7
尝试使用$("html")$("*")代替$("body")。为了触发body上的keyUp事件,必须聚焦于body节点或其子节点之一。您可以通过添加文本输入并将鼠标聚焦于该输入来实现此示例。您真正想要的是捕获任何按键,因此$("html")应该可以工作。 编辑:我认为您的示例可能有效,但无论如何,要有条件地运行逻辑,您可以尝试以下操作:
if ($(document.body).is(".focusOnKeypress")) {
   $("html").live(...);
}

或者,我认为这个也可以起作用:
$("body:not(.noFocusOnKeypress)").parent("html").live(...);

谢谢,它起作用了。如何选择整个页面而不是某些特定的类?尝试过$('html:not(.noFocusOnKeypress)'),但它没有起作用。 - ajsie

6

只需听窗外声音!

$(window).keydown(function(event){
    alert(event.keyCode);
});

2
此内容不支持IE8及以下浏览器。http://www.quirksmode.org/dom/events/keys.html - S. Albano

2

我尝试了这段代码。它可以正常工作。

$('body').on('keyup', function() {
     alert('testing');
});

0
希望这能有所帮助。
$(document.body).on('keyup', function (e) {
    alert('In');
}):

0

它不起作用是因为您的页面没有焦点...您需要先单击页面,然后它就会起作用...

或者您可以强制将焦点设置到输入元素上,从而将焦点带到页面上...

$(function(){ $('input_selector_here').focus(); });

我已经点击了页面,所以它在我输入任何内容之前就获得了焦点...但仍然不起作用...我将尝试使用另一个页面来查看是否有问题与我的当前页面有关。 - ajsie
如果单击除了您的<p>元素之外的任何地方,事件将在文档而不是主体上注册。正文与内容高度相同。尝试监听文档 - S. Albano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接