`
yiminghe
  • 浏览: 1460299 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

焦点与键盘监控

阅读更多

场景:

 

常常会碰到这样的场景,需要加强对键盘的支持,比如搜索提示支持键盘导航,以及数据列表支持pagedown等翻页,

 

 

而这些数据的容器常常都是div,为了效率考虑,我们一般不在document上监控键盘,而直接在容器div上监控:

 

div.on("keydown",function(){
//上
//下
});

 

并且在衔接过程中,直觉得使用

 

div.focus()
 

 

来使得容器获得焦点,试图使得div处于焦点内可以接受键盘输入,但是很不幸的是 firefox 并不可行。

 

规范与绕行:

 

根据 w3c html5 规范   只有以下元素才可以获得焦点接受键盘输入,其他元素只能获得冒泡过来的键盘事件:


    * a elements that have an href attribute
    * link elements that have an href attribute
    * button elements that are not disabled
    * input elements whose type attribute are not in the Hidden state and that are not disabled
    * select elements that are not disabled
    * textarea elements that are not disabled
    * command elements that do not have a disabled attribute
    * Elements with a draggable attribute set, if that would enable the user agent to allow the user to begin a drag operations for those elements without the use of a pointing device



那么普通的 div focus 方法就被 firefox 忽略了,但是当 div 设置了属性 tabindex (强制获得焦点顺序)或者 contenteditable (使得区域可编辑)时,firefox 激活了该 div 的焦点支持,只不过这时候当div获得焦点时,div周围会有环绕虚线(可以设置outline :none清除)。


换个角度:


其实我们不需一定要div自身获得焦点支持键盘事件,只要其内的子元素获得焦点接受事件,div这边只需捕获冒泡过来的事件即可,那么我们可以在容器内生成一个高宽为0的 带有 href 属性的a节点(同样注意 outline 清除),当需要div监控键盘时,只要调用 div 内的 a.focus() ,那么键盘输入就会被a接受,并冒泡到父容器 div,一样可以达到效果。


demo

 

 

 

 

 

 

  • 大小: 5.3 KB
分享到:
评论
4 楼 yiminghe 2010-08-16  
cloudgamer 写道
tabIndex设-1就可以了

这个方法我说了啊:

div 设置了属性 tabindex (强制获得焦点顺序)或者 contenteditable (使得区域可编辑)时,firefox 激活了该 div 的焦点支持,只不过这时候当div获得焦点时,div周围会有环绕虚线(可以设置outline :none清除)。
3 楼 cloudgamer 2010-08-16  
tabIndex设-1就可以了
2 楼 yiminghe 2010-08-04  
luolonghao 写道
谢谢分享,看你们的loadmap下半年很多功能要发布,很期待的。
PS,发现Kissy Editor也简称KE 

哈哈,我也觉得很奇妙
CKEditor
KindEditor
KissyEditor

貌似我们是最山寨的一个
1 楼 luolonghao 2010-08-04  
谢谢分享,看你们的loadmap下半年很多功能要发布,很期待的。
PS,发现Kissy Editor也简称KE 

相关推荐

    C#监控键盘事件

    如描述中提到的,全局键盘监控可能会与杀毒软件冲突,因为这类软件通常也会设置键盘钩子来检测恶意行为。所以在开发这样的功能时,需要考虑到兼容性和安全性,避免不必要的误报或冲突。 8. **异常处理**: 实现...

    VBHOOK实现键盘监控

    本主题聚焦于“VBHOOK实现键盘监控”,这涉及到Windows操作系统中的钩子(Hook)技术,这是一种允许程序拦截和处理特定事件(如键盘输入)的技术。 首先,我们需要了解什么是钩子。在Windows API中,钩子是一种机制...

    鼠标键盘实时监控

    在这里,我们关注的是通过Windows钩子来实现鼠标键盘监控的程序源码和示例,这些资源适用于Visual Studio 2010及以上版本。源码提供了直接运行的exe程序,使得开发者可以快速理解和应用这项技术。 【知识点详解】:...

    qt键盘映射和焦点移动

    在Qt编程中,键盘映射和焦点移动是两个重要的概念,尤其在创建用户界面(UI)应用程序时。本文将深入探讨这两个主题,并结合ARM Linux环境和事件过滤器进行讲解。 首先,让我们理解“qt键盘映射”。在Qt框架中,...

    全局记录键盘按键及监控按键信息

    "KeyTrack"可能是一个键盘监控软件,用于记录并分析用户的按键行为。该软件可能包含以下组件或功能: 1. **键盘事件捕获模块**:这是程序的核心部分,用于实时监听并记录键盘事件,包括按键按下、释放以及任何组合...

    java 键盘监听,可以不设置交点全局监听。

    运行后可以在后台进行监听键盘时间。后台支持打印记录,现在可以打出键盘编号,不用设置焦点就能监听键盘所有操作。

    快捷键与按钮监控按键信息

    标题中的“快捷键与按钮监控按键信息”是指一种软件功能,它允许用户通过特定的快捷键(如Ctrl+S和Ctrl+E)来启动和停止对键盘输入的监控。这种功能通常用于开发、测试或调试过程中,以便了解用户在交互时按下哪些键...

    C#监控键盘鼠标源码

    这个项目涉及到了C#编程语言与Windows API的深度结合,尤其是利用钩子(Hook)技术来实现对键盘和鼠标的监控。下面将详细阐述相关知识点。 1. **C#编程语言**:C#是由微软开发的一种面向对象的编程语言,广泛应用于...

    电脑焦点查看工具

    当我们在电脑上工作或打字时,有时会突然发现键盘输入并未在当前活动窗口进行,而是被其他程序或者窗口抢占了焦点,这可能会导致输入的信息错乱,影响工作效率。这款工具的主要功能就是帮助用户定位并找出是哪个程序...

    键盘钩子获取USB扫描枪扫描数据

    键盘钩子是Windows操作系统提供的一种机制,允许应用程序监控其他进程的键盘事件。这通过安装一个系统级的钩子实现,即`SetWindowsHookEx`函数。当键盘事件发生时,系统会调用预先设定的钩子函数,这样开发者就能在...

    C# 键盘记录 按键记录

    在C#中,可以使用SetWindowsHookEx函数创建全局键盘钩子,这样即使焦点不在当前应用,也能捕获到键盘事件。 3. **WH_KEYBOARD_LL钩子**:这是用来实现低级键盘钩子的类型,它能够捕获所有线程的键盘输入,不论它们...

    桌面焦点检测工具

    窗口焦点是指用户与哪个应用程序交互,即鼠标点击或键盘输入作用于哪个窗口。操作系统会维护一个当前活动窗口,也就是拥有焦点的窗口。桌面焦点检测工具通过监听操作系统级别的事件,持续跟踪这个焦点的变化,当有新...

    vb调用vc的dll实现键盘HOOK

    全局HOOK是一种技术,允许程序在系统级别捕获键盘事件,无论焦点在哪个应用程序上。 **全局键盘HOOK简介** 全局键盘HOOK是一种系统级的钩子,它可以在操作系统中设置,以便在任何进程中产生的键盘事件(如按键按下...

    用C#编写的一个键盘钩子用于记录键盘输入

    标题中的“用C#编写的一个键盘钩子用于记录键盘输入”指的是使用C#编程语言创建一个程序,该程序通过设置...通过这个项目,开发者可以学习到如何在C#环境中进行系统级别的交互,以及如何实现跨应用程序的键盘监控功能。

    C#控件中失去焦点Focus事件与获得焦点Focus事件

    在C#编程中,控件的焦点管理是用户界面交互中的关键部分,它涉及到控件何时获取或失去用户的输入注意力。...在处理TextBox这样的输入控件时,这两个事件尤为重要,因为它们允许我们实时监控和处理用户的输入行为。

    易语言后台暗码监控

    总结来说,"易语言后台暗码监控"涉及到的技术包括:易语言编程、键盘钩子的设置与回调处理、系统API的调用(如安装和释放钩子、拷贝内存、获取句柄)、以及可能的事件反馈机制。这些技术的组合应用,使得开发者能够...

    Qt后台监听键盘按键事件

    该实例程序使用Qt进行,windows的键盘后台监听,即使Qt桌面程序失去焦点在后台运行,也会捕捉到按键事件 这个程序使用windows的钩子(hook)实现的,Qt官方没有相关的实现 关于编译,我用的是Qt5.9.7 MinGW32位,我...

    全局键盘钩子获取扫描枪输入

    这种技术通常用于实现系统级的键盘监控、热键设置或特定输入处理,例如本例中的扫描枪输入识别。 在Windows API中,全局键盘钩子通过`SetWindowsHookEx`函数实现,它需要指定一个钩子类型(在此为`WH_KEYBOARD_LL`...

Global site tag (gtag.js) - Google Analytics