Javascript GWT-列表框,如何预览changeEvent
我正在努力实现一个列表框,希望在用户在列表框中进行选择时能够提醒用户。是否有方法响应用户单击列表框中的项目,并在“changeEvent”发生之前响应选择,以便我可以防止触发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
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最后,我将该值存储在焦点事件中,并在更改事件中将其切换回原处。我最终没有使用事件杀死,但我会研究它,谢谢你的建议@如果你有另一个改变的听众,杀戮是很重要的