【问题标题】:Flex focusOut event on TextInput and pop-up does not remove focus?TextInput 和弹出窗口上的 Flex focusOut 事件不会移除焦点?
【发布时间】:2011-07-21 17:07:34
【问题描述】:

我有一个包含多个字段和一个带有 focusOut 事件的文本字段的 flex 应用程序:

<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(this);”当用户点击关闭按钮时。

但是,问题是当窗口关闭时,焦点又回到了lastNameClientTextInput!我无法点击或跳出该字段!

当我跳出标签时,我最初确实看到 ibeam 光标从姓氏字段按制表顺序(地址)移动到下一个字段,然后我的窗口弹出。当我关闭窗口时,它会返回到姓氏字段并突出显示该值。

好像我需要做一些事情来验证 focusOut 事件?

【问题讨论】:

  • 我很好奇,为什么您会在关注文本输入之后弹出一个弹出窗口?这是一种非常奇怪的非标准用户体验行为。
  • Person 输入名字和姓氏,添加新客户,按下选项卡(或点击退出),应用程序正在执行重复检查并弹出可能重复的列表。说它很奇怪,但这就是我在大多数具有客户/客户重复名称检查功能的业务应用程序中一直看到的方式。与其让用户首先手动搜索,它可能会节省一些点击/步骤,特别是如果它是一个不常见的姓氏。
  • 而不是弹出窗口,你不是宁愿有一个下拉列表吗?像搜索完成框? (想想谷歌,而是给你可能的名字)。如果是这种情况,您不需要弹出窗口,也不需要检查“onFocusOut”。你应该在“改变”时这样做。
  • 我采用了下拉列表的概念,效果很好。

标签: apache-flex events focus flash-builder


【解决方案1】:

您可能想尝试使用 valueCommit 而不是 focusOut。您还可以侦听被移除的弹出窗口并手动设置焦点。

HTH;

艾米

【讨论】:

  • 试过了,但它的工作原理与更改事件相同,这意味着我输入的每个字符都会引发 valueCommit 事件。即便如此,它似乎也在做同样的事情 - 弹出窗口出现,当弹出窗口关闭时,焦点会返回到最后一个名称字段并突出显示值。我想现在我可以手动将焦点设置到下一个字段(地址),但似乎是一个 hack。
【解决方案2】:

我知道晚了,但 Flex 可能是指 FocusManager.lastFocus 属性以从组件上次活动时恢复焦点。触发弹窗时,尝试调用:

(focusManager as FocusManager).mx_internal::lastFocus = null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多