2011-02-28 35 views
1

在Javascript中,如何检测文档是否在直接对焦。通过直接重点,我的意思是你在文件上,但没有表单元素的重点。检测文档是直接对焦

我在这里要做的是与Stackoverflow的所见即所得编辑器相反。当焦点位于textarea上时,按Ctrl + B时​​,Stackoverflow加粗文本。我想在用户没有在页面上填写任何表单时执行命令。例如,SHIFT + N进入我的应用程序的下一步,但仍允许在表单textareas上写入大写N。

我使用原型框架,BTW。

回答

1

有没有必要跟踪焦点,它是过于复杂的事情,并没有通过常识气味测试......如果你错过了一个事件可能会出错。

如果您观察到页面的根元素(documentdocument.body),那么未明确停止的所有事件都会到达那里,您将能够过滤掉在表单元素上启动的那些事件。

document.observe('keypress', function(event, element) { 
    if (event.findElement('input, select, textarea') == document) { 
     // No input was typed on. 
    } 
}); 

这个例子没有过滤掉锚,但可以通过添加afindElement呼叫做容易。

0

为什么不使用全局JavaScript变量作为标志?

var isFocusedOnElement = false; 

,并为其分配的onfocus触发所有的文本区域,输入框,它更改为true onfocus,并onBlur假。

然后,只要您遇到击键,就可以检查此标志。