使Flex 3按钮响应回车键的最佳方法是什么?

时间:2009-01-20 19:02:43

标签: flex

在Flex 3中,当鼠标单击它们时,或者当它们具有焦点并且用户按下空格键时,按钮会调用它们的单击处理程序。

当用户按下回车键时,是否有一种直接的方法可以使具有焦点的Flex 3按钮调用其单击处理程序?

7 个答案:

答案 0 :(得分:8)

当然,你可以这样做:

<mx:Script>
    <![CDATA[
        import mx.controls.Alert;

        private function btn_click(event:MouseEvent):void
        {
            Alert.show("Clicked!"); 
        }

        private function btn_keyDown(event:KeyboardEvent):void
        {
            if (event.keyCode == Keyboard.ENTER)
                btn.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
        }
    ]]>
</mx:Script>

<mx:Button id="btn" label="Click Me" click="btn_click(event)" keyDown="btn_keyDown(event)" />

...虽然我不喜欢在这些对象之外的对象上调度事件。更简洁的方法可能是将Button子类化,在子类中添加侦听器和处理程序,然后从该类中调度click事件。但这应该有助于说明这一点。祝你好运!

答案 1 :(得分:3)

对于类似登录表单的内容,您需要实际使用mx:form - 这是说明它的代码片段:

<mx:Form defaultButton="{loadButton}">
<mx:TextInput id="feedURL" />
<mx:Button id="loadButton" label="Load" click="someHandler(event)" />
</mx:Form>

输入网址并按Enter,bam,预期行为。

here.

搜索

答案 2 :(得分:3)

如果您要提交类似“登录”对话框之类的表单,则TextField上的“enter”属性是一个很好的解决方案:

<mx:TextInput displayAsPassword="true" id="wPassword" enter="handleLoginSubmit()"/>

答案 3 :(得分:1)

更好

    private function setValidationFocus(formObject:Object):void
    {
        formObject.setFocus();
        formObject.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OUT));  // sneaky sneaky
        formObject.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OVER));
    }

答案 4 :(得分:1)

您还可以在Christian对按钮本身的回答中添加KEY_DOWN侦听器。只要确保你调用stopImmediatePropagation。在这个例子中,我让任何键导致按钮动作。我使用相同的处理程序,所以我允许任何“事件”类型。您可以使用不同的“cancelClick”处理程序。

protected function cancelClick(e:Event = null):void{
    this.dispatchEvent(new Event(Event.CANCEL)); // do component action
    e.stopImmediatePropagation();
}

override protected function partAdded(partName:String, instance:Object):void {
    super.partAdded(partName,instance);
    switch(instance){
        case cancel:
            cancel.addEventListener(MouseEvent.CLICK,cancelClick);
            cancel.addEventListener(KeyboardEvent.KEY_DOWN,cancelClick);
    }
}

答案 5 :(得分:0)

尝试“buttonDown”事件;它可以在任何一种情况下发送。否则你可能正在考虑使用“keyDown”并检查按下的键。

答案 6 :(得分:0)

我一直在看同样的问题,但Christian Nunciato的回答似乎对我来说是最好的。    还有一件事要添加到他的解决方案中,我认为btn.dispatchEvent(new MouseEvent(MouseEvent.CLICK))中的冒泡标志应该设置为false (btn.dispatchEvent(new MouseEvent(MouseEvent.CLICK, false))),因为 该事件应该在按钮上被隔离。