在Flex 3中,当鼠标单击它们时,或者当它们具有焦点并且用户按下空格键时,按钮会调用它们的单击处理程序。
当用户按下回车键时,是否有一种直接的方法可以使具有焦点的Flex 3按钮调用其单击处理程序?
答案 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,预期行为。
搜索答案 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)))
,因为
该事件应该在按钮上被隔离。