GWT - ListBox,如何预览changeEvent

时间:2012-09-25 20:24:54

标签: javascript events gwt listbox dom-events

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

Event.addNativePreviewHandler(new NativePreviewHandler() {
   @Override
   public void onPreviewNativeEvent(NativePreviewEvent event) {
      System.out.println("EVENT: " + event.getTypeInt());
   }
});

但是这永远不会响应单击ListBox中的特定元素,它只会在您关注ListBox时响应最初单击ListBox。我希望能够做到这样的事情:

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();
      }
   }
});

非常感谢任何建议,谢谢!

3 个答案:

答案 0 :(得分:4)

感谢大家的意见。我最终做的是在列表框聚焦时保存选择的状态。保存此索引并在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来完成。再次感谢您的评论!

答案 1 :(得分:3)

如果你不想对它进行处理,你可以简单地杀死它:

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

答案 2 :(得分:1)

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

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