2011-07-21 34 views
0

我有幾個字段和一個文本字段focusOut事件Flex應用程序:TextInput上的Flex focusOut事件和彈出窗口不會消除焦點?

<mx:FormItem label="Last" x="226" y="1"> 
    <s:TextInput id="lastNameClientTextInput" text="@{_currentEditClient.lastName}" change="textFieldChangeCapitalize(event)" focusOut="lastNameClientTextInput_focusOutHandler(event)"/> 
</mx:FormItem> 

正如預期的那樣,當我選項卡或點擊字段中鍵入它執行我的「lastNameClientTextInput_focusOutHandler」方法的值之後,簡單地彈出,彈出一個新窗口:

protected function lastNameClientTextInput_focusOutHandler(event:FocusEvent):void 
     { 

       clientSearchPopUp = new ClientListWindow(); 
       PopUpManager.addPopUp(clientSearchPopUp, this, true); 
       PopUpManager.centerPopUp(clientSearchPopUp);      

     } 

該窗口會做一個「PopUpManager.removePopUp(本);」當用戶點擊關閉按鈕時。

但是,問題是當窗口關閉時,焦點回到lastNameClientTextInput上!我無法點擊或退出該字段!

當我標籤出來的時候,我最初看到的是ibeam光標從標籤順序(地址)的姓氏字段移動到下一個字段,然後我的窗口彈出。當我關閉窗口時,它會移回到姓氏字段並突出顯示該值。

這就好像我需要做一些事情來驗證focusOut事件?

+0

我很好奇,爲什麼你會在彈出窗口後關注textinput?這是一種非常奇怪的,非標準的用戶體驗行爲。 –

+0

人類輸入名字和姓氏,添加新客戶端,按下標籤(或點擊),應用程序正在執行重複檢查並彈出可能的重複列表。稱它很奇怪,但這正是我在大多數具有客戶/客戶端重複名稱檢查功能的業務應用程序中總是看到它的做法。不要讓用戶先手動搜索,它可能會節省一些點擊次數/步驟,尤其是如果它是不常見的姓氏。 –

+0

取而代之的是一個彈出窗口,你寧願有一個下拉列表嗎?像搜索完成框? (認爲​​谷歌,而是給你可能的名字)。如果是這種情況,則不需要彈出窗口,也不需要檢查'onFocusOut'。你應該做'改變'。 –

回答

0

你可能想嘗試使用valueCommit而不是focusOut。你也可以聽取被刪除的彈出窗口並手動設置焦點。

HTH;

艾米

+0

試過了,但它和change事件一樣,意味着我輸入的每個字符都會引發一個valueCommit事件。即便如此,它似乎也在做同樣的事情 - 當彈出窗口關閉焦點時,彈出窗口會彈出,並返回姓氏字段,其中值突出顯示。我想現在我可以手動將焦點設置到下一個字段(地址),但看起來像一個黑客。 –

0

晚了,我知道,但Flex的可參照FocusManager.lastFocus財產恢復焦點從上次成分是活躍。當觸發彈出時,請嘗試撥打電話:

(focusManager as FocusManager).mx_internal::lastFocus = null; 
相關問題