我想知道是否有任何方法可以通过按Enter键来导航对话框组件,其方式与TAB键本身实现的方式相同?
虽然我还没有尝试过处理keyDown和keyUp事件,但它似乎是可行的。尽管您可能无法通过这种方式截取浏览器生成的对话框以及使用Window.alert()创建的其他对话框。您是如何创建对话框的?
选项卡键是浏览器完成更改焦点的工作-无需添加任何特殊内容,您会发现选项卡适用于互联网上的任何表单(除非出于某种原因被明确禁用…)。
要使用回车键移动焦点,您必须监听onkeydown事件(通过选项卡的焦点更改也发生在onkeydown上,因此为了一致性选择此项),检查它是否是回车键,如果是,则将焦点移动到列表中的下一个元素。
典型的选项卡焦点行为包括浏览器检查页面上元素的tabIndex,并找到页面上具有更高tabIndex的下一个元素,或最近的后续同级/同级元素。我没有一个容易实现这一点的方法,所以我将专注于下一个小部件。
GXT3的FormPanelHelper有一些方便的方法来查找所有字段——这段代码也可以用作非GXT字段的基础。从对话框中找到的字段中跟踪所有FocusEvent和BlurEvent,并使用它始终跟踪当前聚焦的字段。向对话框本身添加一个键处理程序,以捕获所有键事件,并检查其中一个是否为回车键。如果是这样的话,从当前关注的字段中找出下一个字段是什么,并对其调用.focus()-这将触发上面描述的焦点处理程序,这样您的记账就会正确更新。
正如@eliran-m所指出的,考虑不使用tab键-不要妨碍用户按照他们习惯的方式导航。添加新功能可能是一件好事,但取消预期行为可能不是。