如何在窗体中键入字母时阻止键盘功能触发
How to stop keyboard functions from firing when the letters are typed in a form?
我有这个脚本,当按下键盘上的"N"和"P"键时,它会触发滚动到下一个/上一个。我的问题是当用户以任何形式(例如搜索字段、登录字段等)正常键入这些字母时,如何阻止它触发,因为当我按 n 例如 John 时,它不会写 N 而是触发滚动函数。如何解决这种行为?
我的代码如下:
$(document).keydown(function (evt) {
if (evt.keyCode == 78) {
evt.preventDefault();
scrollToNew();
} else if (evt.keyCode == 80) {
evt.preventDefault();
scrollToLast();
}
});
谢谢。
事件对象有一个 target
属性,该属性告诉您事件实际发生的位置(之后它冒泡到文档级处理程序)。因此,您可以针对表单字段元素测试evt.target
,如果匹配,则不要执行特殊逻辑。
可能最简单的方法是使用 closest
,例如:
$(document).keydown(function (evt) {
if (!$(evt.target).closest('input, select, textarea')[0]) {
if (evt.keyCode == 78) {
evt.preventDefault();
scrollToNew();
} else if (evt.keyCode == 80) {
evt.preventDefault();
scrollToLast();
}
}
});
在那里,我问最接近的表单字段是从元素开始的(因为closest
从您赋予它的元素开始)并通过祖先开始。如果没有,则返回的 jQuery 对象将为空,[0]
将返回 undefined
。因此,由于!undefined
是true
,我们将在不在表单字段中时处理您的逻辑。
我认为类似
$('form').on('keydown', function(event) {event.stopPropagation();});
如果您不需要窗体内部的键盘控件,应该可以解决问题。
使用 Event
对象的 target
属性,该属性指向源 DOM 节点。因此,您可以轻松使用
var nn = evt.target.nodeName.toLowerCase();
if (nn != "input" && nn != "textarea")
// do your special handling
但是检查 form
属性是否存在可能更容易,该属性指向元素所有者窗体:
if (! "form" in evt.target)
// do your special handling
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 是否有“”的键盘快捷键;暂停动画”;Chrome开发工具中的功能?(F12)
- 辅助功能键盘专用选项卡到z索引“;返回顶部”;
- 如果处理字符串值的文本区域是只读的,如何使用 JavaScript 在虚拟键盘上使用 CAPSLOCK 功能
- 一些功能可以确定三星八达上虚拟键盘的打开
- 如何在窗体中键入字母时阻止键盘功能触发
- 使用 JS 和 F11 键盘键功能的按钮
- 从数字键盘中删除显示和消失功能
- jQuery键盘功能键按下
- 无法通过键盘事件执行功能
- 使用javascript禁用所有键盘功能
- 缩短jQuery动画功能,并在键盘上恢复到“开始”
- 如果打开了scriptUI调色板,为什么InDesign会失去所有键盘功能
- 如何调整这个jquery键盘导航以允许其他标签和键盘功能
- 保持iOS键盘打开,而keyup功能运行
- Jquery重复功能时使用自定义键盘
- 我的虚拟键盘中的删除功能在javascript中不起作用
- Android键盘上点击字母运行功能