2015-12-22 44 views
1

更新:顯然這是accessibility scheme of Flex Spark Components星火按鈕俘獲的keydown(空格鍵)事件

Button控件按空格鍵激活按鈕控制的一部分。要取消激活按鈕,請在釋放空格鍵之前按下Tab鍵將焦點從 移開。

我想它可以通過編譯器指令關閉:Accessibility best practices


問:沒有任何理由火花按鈕會捕獲關鍵事件,特別是「空格」鍵事件?

背景:我已經繼承並維護了一個在Flex 4.6中完成的大型遺留項目。我看到一個奇怪的行爲與Spark Button。基本上,一旦按鈕被點擊(即給定焦點),keyEvent(spaceBar)將觸發附加到按鈕的點擊事件處理程序。

奇怪的是吧?

該按鈕在MX:Module內的MXML(以下)中定義。該模塊具有安裝階段關鍵事件偵聽器,但對於那些在事件處理程序做什麼用的按鈕:

this.stage.addEventListener(KeyboardEvent.KEY_DOWN, echoKeyDownHandler); 
this.stage.addEventListener(KeyboardEvent.KEY_UP, echoKeyUpHandler); 

如果我把trace語句按鈕的事件處理程序檢查事件類型時,會發生這種怪異的行爲,該類型報告爲click。我沒有看到Spark Button關於捕獲這樣的關鍵事件的文檔中的任何內容。

<s:Button id="toggleBtn" 
    label="Editor" 
    click="toggleBtn_clickHandler(event)" 
     x="943" y="8"/> 

回答

0

這對Flex來說很正常。您還應該能夠通過使用<tab>密鑰來瀏覽交互式元素。 <space>通常就像點擊一樣。您可以嘗試通過任一

一)通過檢查keyboardPressed財產按下按鈕

B)後,將焦點設置到另一個對象,以避免這種情況。

兩者都有點hacky imho。我不確定是否可以在Flex中徹底關閉鍵盤導航。

[編輯1],我只是在想,如果它無助於簡單地覆蓋默認的鍵盤處理程序是這樣的:

override protected function keyDownHandler(evt:KeyboardEvent):void {} 

這是由UIComponent繼承。你需要創建一個擴展s:Button的自己的組件。一個小缺點...

[編輯2]我不能停止想這件事,即使我在2 - 3年前停止使用Flex。所以我google了一下,發現這個堆棧溢出後: How to disable default browser navigation with Space in Flex

+0

哦,是的,'keyboardPressed'是保護,所以它只會在一個自定義組件內擴展s:按鈕 - 我的錯。 – FatalDiskError

+0

不是100%與您的問題相關,但也檢查屬性** tabEnabled **和** tabFocusEnabled **。所以你至少可以擺脫導航。我認爲Adobe放棄了Flex的原因;-) – FatalDiskError