我想取消以下处理程序的事件。下面的示例类显示了我尝试的内容。尽管取消了文本框的关键事件,仍然会调用第二个处理程序。处理程序的顺序是正确的。我可以证明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());
}
}
答案 0 :(得分:0)
event.stopPropagation()
取消event bubbling,即阻止触发父元素上的处理程序。它不会阻止同一元素上的处理程序接收事件。
答案 1 :(得分:0)
我和你有完全相同的问题。你找到了解决方案吗?
我想唯一的解决方案是不注册事件监听器并让handler1代替处理器2调度(或不调度)。