理解对div的关注

时间:2014-07-14 03:53:24

标签: javascript dojo widget focus

我觉得我理解focus()

  • 当尝试专注于表单元素时,例如input,只要文档准备好,它就“正常工作”。
  • 在尝试关注非表单元素时,例如div,您必须添加tabindex属性。
    • tabindex将按Tab键添加到按优先顺序排列的元素(数字越大越好),0及以上。但是,有一个特殊值-1,它会从Tab键顺序中明确删除该元素。
  • 以编程方式调用focus时,请在setTimeout
  • 内执行此操作
    • 请务必使setTimeout值足够大,等待显示动画完成,但不要太晚以至于用户有时间做其他事情,例如点击或在别处输入。

非常简单,真的,对吗?但不是。它对我不起作用。

我的具体用例是我有一个启用了键导航的小部件,如果你点击右键,会打开一个弹出式模态小部件。它很棒。但我不能让那个模态小部件成为焦点。那个没有表单输入的模态小部件(只是一些文本和一个关闭链接)。我已将keydown / up / press事件添加到模态窗口小部件中,我已将tabindex添加到各个节点并尝试将其聚焦,但原始窗口小部件仍会获取键盘事件。

DOM方面,模态小部件,尽管在keynav小部件中是new,但是在body级别附加到DOM,所以它不像键盘事件冒泡通过我的模态对话框应该是stopPropagation'd,它永远不会得到那些事件。

这意味着如果在点击模态小部件之前点击另一个键,它会在第一个模态对话框下面打开另一个模态对话框!

我真的希望我忽略了关注div s的一些事情,因为我有几个我想要实现的功能因为(我相信)焦点请求被忽略而无法正常工作

帮助!我错过了什么?

1 个答案:

答案 0 :(得分:0)

在特定情况下,我正在调查,我实际上有一个错字。

我这样做了,这不起作用:

 setTimeout(lang.hitch(this, this.domNode.focus), 100);

但这有效:

 setTimeout(function() { this.domNode.focus() }, 100);

那就是说,focus我遇到了很多问题,经常让我害怕以编程方式使用它。

希望,问题中的提示列表对某人有帮助。