为啥 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 选择器适用于 Chrome,但不适用于 Safari?
为啥我的 jquery 表单验证不适用于 IE7?它适用于 FF、Opera、Safari 等
AngularJS ng-keydown 指令仅适用于 <input> 上下文?