为什么JQuery keydown适用于窗口但不适用于文本框?

时间:2008-10-09 13:24:16

标签: jquery

为什么这样做:

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

但不是这样:

$('#ajaxSearchText').keydown(function(event){
    alert(event.keyCode);
});

我正在使用Firefox 3进行测试。 有趣的是,它们都不适用于IE7。

6 个答案:

答案 0 :(得分:7)

在Chrome,IE7和Firefox 3.0.3中查看此内容。按预期工作。 jQuery版本1.2.6。

<html> 
  <head> 
    <script type="text/javascript" src="jquery-1.2.6.js"></script> 
    <script type="text/javascript"> 
      $(function() 
      {
        $("#ajaxSearchText").keydown(function(event)
        {
          alert(event.keyCode);
        });
      });
    </script> 
  </head> 
  <body> 
    <input type="text" id="ajaxSearchText"></input>
  </body> 
</html> 

答案 1 :(得分:4)

要修复IE6和IE7中的问题,请尝试此操作...

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

将事件附加到$(document)似乎是一件神奇的事情。

你的第一段代码确实应该在IE中运行。它似乎归结为jQuery中的一个错误,希望很快得到解决......

这是jQuery中错误报告的链接。 https://bugs.jquery.com/ticket/3614

答案 2 :(得分:3)

对于所有keydown / keyup / keyboard需求,请使用jQuery热键插件。

几个月前看到它,它永远不会给它留下深刻印象。按照插件演示的跳转... http://code.google.com/p/js-hotkeys/

它映射键盘上的所有键,包括组合。希望它有所帮助!

答案 3 :(得分:1)

尝试使用

$('#ajaxSearchText').keyup(function(event){
    alert(event.keyCode);
});

非常适合我。还要检查textarea的id

答案 4 :(得分:0)

$('#searchInput').keydown(function() {
    alert('testing');
});

不起作用。但是,如果将其包装在函数中:

$(function()
{
    $('#searchInput').keydown(function() {
        alert('testing');
    });
});

它会起作用。

没有该函数声明,它只适用于文档和窗口等对象。

答案 5 :(得分:-1)

因为“窗口”对象不支持关键事件。

http://www.w3schools.com/jsref/obj_window.asp

但仅限于'文件':

http://www.w3schools.com/jsref/dom_obj_event.asp

如果它曾经有效,那么它就是jQuery中的一个错误。