我有一个文本框和一个建议框。我在文本框中附加了一个值更改和键加载处理程序,这样无论用户在文本框中键入(或粘贴)的内容都在建议框内进行回显。我可以通过在每个值更改和键盘事件上调用showSuggestionList来显示建议框以显示建议列表。
现在,如何让建议框自动选择建议列表中的第一项?
我尝试过的一种方法是以编程方式模拟按键,即
suggestBox.setFocus(true);
NativeEvent enterEvent = Document.get().createKeyPressEvent(false, false, false, false, KeyCodes.KEY_ENTER);
DomEvent.fireNativeEvent(enterEvent, suggestBox);
textBox.setFocus(true);
这根本不起作用。不模拟回车键。另一个可能的解决方案是扩展SuggestionBox.SuggestionDisplay,但我不太清楚如何做到这一点。任何指针都赞赏。
更新:我还在研究这个并尝试各种方法。
在这里,我尝试通过继承DefaultSuggestionDisplay并覆盖getCurrentSelection()来实现我自己的SuggestionDisplay,以便从我的类中访问。这也不起作用。 Null返回。
private class CustomSuggestionDisplay extends DefaultSuggestionDisplay {
@Override
protected Suggestion getCurrentSelection() {
return super.getCurrentSelection();
}
}
suggestBox.setAutoSelectEnabled(true);
textBox.addKeyUpHandler(new KeyUpHandler() {
public void onKeyUp(KeyUpEvent event) {
suggestBox.setValue(textBox.getText(), true);
suggestBox.showSuggestionList();
if (suggestBox.isSuggestionListShowing()) {
String s = ((CustomSuggestionDisplay) suggestBox.getSuggestionDisplay()).getCurrentSelection().getDisplayString();
Window.alert(s);
}
}
});
在这里,我尝试将值更改处理程序附加到SuggestBox,并将事件类型转换为SuggestOracle.Suggestion。同样,返回null。
suggestBox.addValueChangeHandler(new ValueChangeHandler<String>() {
public void onValueChange(ValueChangeEvent<String> event) {
String s = ((SuggestOracle.Suggestion) event).getDisplayString();
Window.alert(s);
}
});
答案 0 :(得分:5)
使用suggesBox.setAutoSelectEnabled(true)
Here有关GWT的SuggestBox的更多信息:
答案 1 :(得分:0)
您可以尝试将addSelectionHandler与setAutoSelectEnabled结合使用,以便在选择建议时接收事件。您可以让Oracle在建议时发送消息,或者显示器在显示列表时发送消息:
public class AutomaticallySelectingSuggestionDisplay extends SuggestBox.DefaultSuggestionDisplay {
@Override
protected void showSuggestions(SuggestBox box, Collection<? extends SuggestOracle.Suggestion> suggestions, boolean isDisplayHtml, boolean isAutoSelectEnabled, SuggestBox.SuggestionCallback callback) {
super.showSuggestions(box, suggestions, isDisplayHtml, isAutoSelectEnabled, callback);
fireValueChangeEventWithFirstSuggestion(suggestions);
}
}
这个想法对我来说有些混乱,所以我希望你能找到一个只使用事件处理程序的解决方案。