取消关注Handler的GWT-Event

时间:2011-06-16 11:35:59

标签: events gwt

我想取消以下处理程序的事件。下面的示例类显示了我尝试的内容。尽管取消了文本框的关键事件,仍然会调用第二个处理程序。处理程序的顺序是正确的。我可以证明Handler1在Handler2之前被调用。在这个示例类中,我可以使用一个标志,但在我的真正的类中,处理程序和文本框是分开的,因此标志将是一个问题。任何想法?

public class EventTestTextBox extends TextBox {

    public static class Handler1 implements KeyUpHandler {
        @Override
        public void onKeyUp(KeyUpEvent event) {
            if (event.isShiftKeyDown()) {
                event.preventDefault();
                event.stopPropagation();
                ((TextBox)event.getSource()).cancelKey();
            }
        }
    }

    public static class Handler2 implements KeyUpHandler {
        @Override
        public void onKeyUp(KeyUpEvent event) {
            Window.alert("should not appear if shift-key is down.");
        }
    }

    public EventTestTextBox() {
        super.addKeyUpHandler(new Handler1());
        super.addKeyUpHandler(new Handler2());
    }

}

2 个答案:

答案 0 :(得分:0)

event.stopPropagation()取消event bubbling,即阻止触发父元素上的处理程序。它不会阻止同一元素上的处理程序接收事件。

答案 1 :(得分:0)

我和你有完全相同的问题。你找到了解决方案吗?

我想唯一的解决方案是不注册事件监听器并让handler1代替处理器2调度(或不调度)。