【问题标题】:GWT FocusPanel, tab key and focus handlersGWT FocusPanel、制表键和焦点处理程序
【发布时间】:2010-06-28 11:15:28
【问题描述】:

我正在实现一个扩展 Composite 并实现 FocusableHasFocusHandlers 的自定义小部件。

该小部件在一个面板中包含两个小部件,我将它们包装到一个FocusPanel 中,用于初始化该小部件。我的构造函数看起来像这样:

public CustomBox() {
    panel = new VerticalPanel();
    ...
    panel.add(caption);
    panel.add(icon);
    ...
    focusPanel = new FocusPanel(panel);
    initWidget(focusPanel);
}

我在焦点面板中委托FocusableHasFocusHandlers 的实现,例如:

@Override
public void setFocus(boolean focused) {
    focusPanel.setFocus(focused);
}

@Override
public void setTabIndex(int index) {
    focusPanel.setTabIndex(index);        
}

@Override
public HandlerRegistration addFocusHandler(FocusHandler handler) {
    return focusPanel.addFocusHandler(handler);
}   

然后我可以使用setFocus(true) 设置我的任何对象的焦点,并使用setTabIndex() 设置选项卡索引。 Tab 键也可以按预期工作,但我的问题是我无法处理焦点事件,因为添加了 addFocusHandler() 的处理程序的 onFocus() 方法永远不会被调用。

我知道焦点正在改变,因为我使用:focus CSS 选择器跟随对象的焦点改变其样式。

为什么从不调用焦点处理程序?

【问题讨论】:

    标签: events gwt cross-browser focus dom-events


    【解决方案1】:

    处理焦点事件可能会很棘手且变化无常。 GWT 通过在需要时将隐藏的输入字段添加到您的 FocusPanel DIV 中来简化此操作。以下是 jQuery 文档的摘录:

    焦点事件在元素获得焦点时发送给它。此事件隐式适用于有限的元素集,例如表单元素(

    我不知道您的问题的解决方案,但我的猜测是与 HTML/浏览器/dom 非常相关的东西正在搞乱事件处理。例如,captionicon 是否也是 FocusPanel?这可能会影响焦点事件的冒泡方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多