按Enter键导航GWT/GXT组件

按Enter键导航GWT/GXT组件,gwt,navigation,gxt,Gwt,Navigation,Gxt,我想知道是否有任何方法可以通过按Enter键来导航对话框组件,方法与按TAB键本机实现的方法相同?尽管我没有尝试过通过处理keyDown和keyUp事件来导航对话框组件,但这似乎是可行的。尽管您可能无法拦截浏览器以这种方式生成的对话框以及使用Window.alert()创建的其他对话框。您是如何创建对话框的?tab键是浏览器,用于更改焦点-无需添加任何特殊内容,您会发现tab适用于internet上的任何形式(除非由于某种原因被明确禁用…) 要使用enter键移动焦点,必须侦听onkeydown

我想知道是否有任何方法可以通过按Enter键来导航对话框组件,方法与按TAB键本机实现的方法相同?

尽管我没有尝试过通过处理keyDown和keyUp事件来导航对话框组件,但这似乎是可行的。尽管您可能无法拦截浏览器以这种方式生成的对话框以及使用Window.alert()创建的其他对话框。您是如何创建对话框的?

tab键是浏览器,用于更改焦点-无需添加任何特殊内容,您会发现tab适用于internet上的任何形式(除非由于某种原因被明确禁用…)

要使用enter键移动焦点,必须侦听onkeydown事件(通过tab更改焦点也会在onkeydown发生,因此选择此项以保持一致性),检查是否是enter键,如果是,则将焦点移动到列表中的下一个元素

典型的tab focus行为涉及浏览器检查页面上元素的tabIndex,并查找页面上tabIndex较高的下一个元素,或最接近的后续同级/同级元素。我没有一个简单的方法来实现这一点,所以我将把重点放在下一个小部件上

GXT 3的FormPanelHelper有一些方便的方法来查找所有字段——这段代码也可以用作非GXT字段的基础。从对话框中找到的字段中跟踪所有FocusEvent和BlurEvent,并使用它们始终跟踪当前聚焦的字段。向对话框本身添加一个键处理程序,以捕获所有键事件,并检查其中一个是否为enter键。如果是这样,请从当前焦点字段中找出下一个字段是什么,并对其调用.focus()——这将触发上述焦点处理程序,以便正确更新簿记


和AsIelRAN-M指出,考虑只留下Tab键——不要妨碍用户导航他们习惯的方式。添加新功能可能是一件好事,但取消预期行为可能不是。

可能是可能的,但高度不推荐。用户习惯于使用Enter键执行一组已定义的操作,导航不是其中之一。