Javascript GWT-列表框,如何预览changeEvent

Javascript GWT-列表框,如何预览changeEvent,javascript,events,gwt,listbox,dom-events,Javascript,Events,Gwt,Listbox,Dom Events,我正在努力实现一个列表框,希望在用户在列表框中进行选择时能够提醒用户。是否有方法响应用户单击列表框中的项目,并在“changeEvent”发生之前响应选择,以便我可以防止触发changeEvent。我试过使用 Event.addNativePreviewHandler(new NativePreviewHandler() { @Override public void onPreviewNativeEvent(NativePreviewEvent event) { Sys

我正在努力实现一个列表框,希望在用户在列表框中进行选择时能够提醒用户。是否有方法响应用户单击列表框中的项目,并在“changeEvent”发生之前响应选择,以便我可以防止触发changeEvent。我试过使用

Event.addNativePreviewHandler(new NativePreviewHandler() {
   @Override
   public void onPreviewNativeEvent(NativePreviewEvent event) {
      System.out.println("EVENT: " + event.getTypeInt());
   }
});
但这不会对单击列表框中的特定元素做出响应,它只会在您聚焦列表框时对最初单击列表框做出响应。我希望能够做到以下几点:

Event.addNativePreviewHandler(new NativePreviewHandler() {
   @Override
   public void onPreviewNativeEvent(NativePreviewEvent event) {
      if(event is changeEvent && event source is listBox) {
          if(do some check here)
             event.stopPropagation();
      }
   }
});

如有任何建议,将不胜感激,谢谢

允许ChangeEvent继续下去没有害处。您可以将逻辑添加到ChangeEvent处理程序中。如果用户决定不继续,只需将选择设置回上一个或删除选择即可

@Override
onChange(ChangeEvent event) {
    // ask user if he wants to continue
    // if yes
       doSomething();
    // if no
       myList.setSelectedIndex(-1);
} 

如果您不想处理该事件,您可以简单地终止该事件:

@Override
onChange(ChangeEvent event) {
    // ask user if he wants to continue
    // if yes
       doSomething();
    // if no
       event.kill();
}

谢谢大家的意见。我最后做的是在列表框聚焦时保存选择的状态。保存此索引并在发生changeEvent时切换,仅在允许的情况下将其更改为下一个选择

@UiHandler("listBox")
public void onListBoxFocus(FocusEvent event) {
   this.saveListBoxSelection = listBox.getSelectedIndex();
}

@UiHandler("listBox")
public void onChange(ChangeEvent event) {
   int newSelection = listBoxCompliant.getSelectedIndex();
   listBox.setSelectedIndex(this.saveListBoxSelection);
   if(proceed with change)
      listBox.setSelectedIndex(newSelection);
   else 
      //cancel event

这可以使用uibinder完成,但也可以通过简单地将此事件直接添加到listBox来完成。再次感谢您的评论

@AndreiVolgin感谢您的回复。我希望能够允许他们单击选项,然后弹出一个弹出窗口提示他们,同意继续,然后根据他们对弹出窗口的响应继续执行changeEvent或取消changeEvent。如果你终止事件,它会还原选择吗?@AndreiVolgin如果你想还原,添加一个变量,该变量将在每次更改时保留所选内容的值,如果不想继续,可以终止事件并将所选内容重置为事件中的最后一个值variable@AdelBoutros最后,我将该值存储在焦点事件中,并在更改事件中将其切换回原处。我最终没有使用事件杀死,但我会研究它,谢谢你的建议@如果你有另一个改变的听众,杀戮是很重要的