在Javascript中,如何检测文档是否在直接焦点中。通过直接焦点,我的意思是你在文档上,但没有任何表单元素。
我在这里要做的是与Stackoverflow的WYSIWYG编辑器相反。当焦点位于textarea上时,当您按CTRL + B时,Stackoverflow会将文本加粗。我想在用户未填写页面上的任何表单时执行命令。例如,SHIFT + N进入我的应用程序的下一步,但仍允许在表单textareas上写入大写字母N。
我使用Prototype框架,BTW。
答案 0 :(得分:1)
没有必要跟踪焦点,它是过于复杂的事情,并没有通过常识气味测试...如果你错过了一个事件,可能会出错。
如果您观察到网页的根元素(document
或document.body
),那么所有未明确停止的事件都会到达那里,您将能够过滤掉那些开始的事件表单元素。
document.observe('keypress', function(event, element) {
if (event.findElement('input, select, textarea') == document) {
// No input was typed on.
}
});
此示例不会过滤出锚点,但可以通过将a
添加到findElement
来轻松完成。
答案 1 :(得分:0)
为什么不使用全局javascript变量作为标志?
var isFocusedOnElement = false;
将onfocus触发器分配给所有文本区域,输入框将其更改为true onfocus
,并将onBlur
更改为false。
然后,只要遇到击键,就可以检查此标志。