2011-12-30 62 views
0

處理的順序我已經有2個hadlers一個建議箱:SelectionHandler上的SuggestBoxTextBoxSuggestionListkeyDownHandler選擇項目。我想在當前顯示建議列表時阻止事件的默認操作(例如,按下Enter鍵)。問題是SelectionEvent總是在KeyDownEvent之前觸發,建議列表關閉後SuggestionEvent被觸發,所以在KeyDownEventHandler建議列表已關閉。我無法使用防止與檢查建議列表中輸入默認操作顯示是這樣的:改變事件的GWT

if ((nativeCode == KeyCodes.KEY_TAB || nativeCode == KeyCodes.KEY_ENTER) && display.isSuggestionListShowing()) { 
    event.preventDefault(); 
} 

其中display.isSuggestionListShowing()是呼籲SuggestBoxisShowing方法。 那麼如何在這種情況下更改事件處理的順序(Selection之前KeyDownkeyDown之前Selection)?

回答

2

我假設你的意思是SuggestBox而不是SuggestionList,因爲在gwt-user jar中沒有那個名字的類。

SuggestBox使用keydown事件來提供SelectEvent - 如果它不能看到按鍵更改(從瀏覽器中,實際上會選擇用戶的操作),它不能提供邏輯選擇事件。

這意味着重新排序事件並沒有什麼意義 - 您不能在原因之前產生效果。在很多情況下,瀏覽器按照特定的順序發出事件,並且無法改變這種情況,所以您必須對問題進行不同的思考。

(另外值得指出的是preventDefault()方法只阻止瀏覽器做它的默認行爲 - 其他處理程序仍會觸發正常)

一種選擇是預覽所有事件唱到SuggestBox前,並在某些情況下取消活動 - 請查看com.google.gwt.user.client.Event.addNativePreviewHandler(NativePreviewHandler)瞭解如何完成此操作。

我沒有看到任何其他選項,所有處理keydown的實際邏輯都被封裝在com.google.gwt.user.client.ui.SuggestBox.addEventsToTextBox()私有方法的內部類中,不會覆蓋它。

+0

你能否提出另一個解決方案? – maks 2011-12-31 18:57:44

+0

你能提供更多的信息,爲什麼這不起作用,或者你不能使用它?我一眼看到的主要其他選項是製作您自己的SuggestBox版本(另外,您能否確認您的意思是SuggestBox),因爲原始版本並不完全適合這樣修改。 – 2012-01-04 00:33:31