Reputation: 6006
I have a Suggest box which has 2 hadlers: SelectionHandler
for selecting items in SuggestionList
and keyDownHandler
on TextBox
of SuggestBox
. I want to prevent default action on event(for example on Enter pressed) when the suggestion list is currently showing. The problem is that SelectionEvent
is always fires before KeyDownEvent
and suggestion list is closed after SuggestionEvent
fired, so in KeyDownEventHandler
suggestion list is already closed. And I can't use prevent default action on Enter with checking the suggestion list is showing like this:
if ((nativeCode == KeyCodes.KEY_TAB || nativeCode == KeyCodes.KEY_ENTER) && display.isSuggestionListShowing()) {
event.preventDefault();
}
where display.isSuggestionListShowing()
is the method which calls isShowing
on SuggestBox
.
So how can i change the order of event handling(Selection
before KeyDown
to the keyDown
before Selection
) in this case?
Upvotes: 0
Views: 780
Reputation: 18331
I'm assuming you mean SuggestBox
instead of SuggestionList
, as there is no class by that name in the gwt-user jar.
The SuggestBox
uses the keydown event to provide the SelectEvent - if it can't see the keys change (from the browser, which actually picks up the user's action), it can't provide the logical selection event.
This means that reordering events doesn't really make sense - you can't have the effect before the cause. In many cases, the browser emits events in a certain order, and there is no way to change this, so you have to think differently about the problem.
(Also worth pointing out that preventDefault() only prevents the browser from doing its default behavior - other handlers will still fire as normal.)
One option would be to preview all events before they get to the SuggestBox, and cancel the event in certain cases - look into com.google.gwt.user.client.Event.addNativePreviewHandler(NativePreviewHandler)
for how this can be done.
I'm not seeing any other option right away - all of the actual logic for handling the keydown is wrapped up in the inner class in the private method of com.google.gwt.user.client.ui.SuggestBox.addEventsToTextBox()
, leaving no options for overriding it.
Upvotes: 2