为啥 JQuery keydown 适用于窗口而不适用于文本框?

Posted

技术标签:

【中文标题】为啥 JQuery keydown 适用于窗口而不适用于文本框?【英文标题】:Why does JQuery keydown work for window but not textbox?为什么 JQuery keydown 适用于窗口而不适用于文本框? 【发布时间】:2010-09-16 06:41:16 【问题描述】:

为什么会这样:

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

但不是这个:

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

我正在使用 Firefox 3 进行测试。 有趣的是,它们都不能在 IE7 中工作。

【问题讨论】:

建议:提供尽可能小的独立示例来说明您的问题。 【参考方案1】:

在 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> 

【讨论】:

【参考方案2】:

要修复 IE6 和 IE7 中的问题,试试这个...

$(function() 

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

将事件附加到$(document) 似乎是这里的神奇之处。

您的第一段代码确实也应该在 IE 中工作。这似乎归结为 jQuery 中的一个错误,有望很快得到修复......

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

【讨论】:

此错误报告已作为“不是错误”关闭,因为“窗口”不支持关键事件 另请参阅:***.com/questions/1717897/…【参考方案3】:

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

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

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

【讨论】:

我会添加评论以帮助像我一样偶然发现此问题的任何人。此插件适用于 jQuery 1.4.2 及更高版本的版本在这里:github.com/jeresig/jquery.hotkeys jQuery 已经具备了回答这个问题所需的一切,插件并没有真正的帮助。 抱歉,ars265,这完全是错误的。请告诉我们如何轻松使用原生 jQuery 来捕获 ctrl + alt + del。如果你使用 ascii/key 代码你已经丢失了......【参考方案4】:

尝试使用

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

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

【讨论】:

【参考方案5】:
$('#searchInput').keydown(function() 
    alert('testing');
);

不会工作。但是,如果将其包装在一个函数中:

$(function()

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

它会起作用的。

没有那个函数声明,它只适用于像文档和窗口这样的对象。

【讨论】:

【参考方案6】:

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

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

但仅在“文档”上:

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

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

【讨论】:

以上是关于为啥 JQuery keydown 适用于窗口而不适用于文本框?的主要内容,如果未能解决你的问题,请参考以下文章

将 jQuery .keydown() 限制为仅特定键

为啥 jQuery 选择器适用于 Chrome,但不适用于 Safari?

为啥我的 jquery 表单验证不适用于 IE7?它适用于 FF、Opera、Safari 等

AngularJS ng-keydown 指令仅适用于 <input> 上下文?

Ajax 加载面板适用于 FF,但不适用于 Chrome。知道为啥吗?

为啥 Dojo Tab Container 仅适用于浏览器调整大小