【问题标题】:Stop a event from bubbling in GWT阻止事件在 GWT 中冒泡
【发布时间】:2008-10-18 00:27:13
【问题描述】:

我有以下sn-p的代码,changeTextArea是一个TextArea对象。

changeTextArea.addKeyboardListener(new KeyboardListenerAdapter()
  public void onKeyPress( Widget sender, char keyCode, int modifier){
    //do something
    //I WISH TO STOP THE EVENT THAT MAPS TO THIS KEYPRESS FROM BUBBLING ANY FURTHER
  }
}

如何阻止导致调用此方法的事件从 changeTextArea 冒泡到包含 changeTextArea 的 Panels/Widgets/Composites/Whatever 中。简而言之,我如何阻止它进一步冒泡。任何帮助将不胜感激(尤其是代码示例)。

【问题讨论】:

    标签: java events gwt


    【解决方案1】:

    据我所知,您无法通过键盘监听器来实现,但可以通过使用 DOM 类添加事件预览来实现:

    DOM.addEventPreview(EventPreview preview) 
    

    那么当你得到事件时:

    onEventPreview(Event event) 
    

    您应该返回 false,表示您要取消活动。 Event 对象也支持这种方法:

    public final void cancelBubble(boolean cancel)
    

    取消给定事件的冒泡。这将阻止事件传播到父元素。

    您可以在此处找到更多详细信息: http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/index.html?overview-summary.html

    【讨论】:

      【解决方案2】:

      您绝对可以在任何可以访问事件的代码中使用事件的 cancelBubble() 和 preventDefault() 方法。无需事件预览...

      【讨论】:

        【解决方案3】:

        您可以调用发送方的 cancelKey() 事件。这是一个只允许输入数字的示例,所有其他键都被拒绝。

        私有类 RowColChangeHandler 实现 KeyPressHandler {

            public void onKeyPress(KeyPressEvent event) {
                char keyCode = event.getCharCode();
                if(keyCode <48 || keyCode >57)
                {
                    ((TextArea)event.getSource()).cancelKey();
                }
            }
        }
        

        【讨论】:

          【解决方案4】:

          你可以通过做 event.doit = false

          【讨论】:

          • 也许一些解释会让你的答案更有用:)
          猜你喜欢
          • 2023-03-31
          • 2011-05-30
          • 1970-01-01
          • 1970-01-01
          • 2012-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多