【问题标题】:Event listener to keyboard event not listening in a module键盘事件的事件侦听器不在模块中侦听
【发布时间】:2011-07-08 15:19:14
【问题描述】:

我在一个包含视图堆栈及其子级的模块中执行此操作。 在模块的 creationComplete 上调用 onInit()。

当我在此模块的视图堆栈的其中一个子视图中并按 Enter 键时,它根本不会调用侦听器函数(其中的 bp 不会被命中)。

private function onInit():void{
 this.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
}

private function keyPressed(evt:KeyboardEvent):void
           {//this breakpoint never gets hit on pressing a key in screen
               if (evt.keyCode == Keyboard.ENTER)
               {
                //do this   
                   }               
           }

【问题讨论】:

    标签: actionscript-3 apache-flex flex3


    【解决方案1】:

    您应该向舞台对象添加关键侦听器:

    private function onInit():void{
        this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
    }
    

    【讨论】:

      【解决方案2】:

      这可能非常令人沮丧,因为有一些不同的事情会影响这一点。

      1) 在适当的位置添加您的事件侦听器。您拥有的代码可以很好地捕获,只需确保它位于触发事件的父级或更高级别。

      2) 你需要确保你有焦点。这通常是人们遇到的问题,它在文档中,但不是很清楚。如果您查看此处的实时文档链接并搜索 setFocus() - 您会注意到它在他们的每个示例中(除了顶部,它已损坏!) - 然而,他们从未提及它在页面上的实际文档中。

      http://livedocs.adobe.com/flex/3/html/help.html?content=events_11.html

      因此,即使在他们的第一个示例中,如果您点击应用程序(而不是文本框),它也不会工作!

      <?xml version="1.0"?>
      <!-- events/TrapAllKeys.mxml -->
      <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();">
      <mx:Script><![CDATA[
          private function initApp():void {
              application.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
          }
      
          private function keyHandler(event:KeyboardEvent):void {
              t1.text = event.keyCode + "/" + event.charCode;
          }
      ]]></mx:Script>
      
      <mx:TextInput id="myTextInput"/>
      
      <mx:Text id="t1"/>
      
      </mx:Application>
      

      但是,如果您通过像这样更改 init 函数来设置自己的焦点,它会的!

      private function initApp():void {
              application.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
              myTextInput.setFocus();
          }
      

      测试这是否是您的问题的另一个技巧是添加一个文本框作为具有捕获的容器的子项,如果它们在您单击该文本框后神奇地工作 - 这确实是一个焦点问题!

      =)

      【讨论】:

      • 谢谢 Nate,我也会尝试,但 Shanethehat 的建议也很容易奏效。
      猜你喜欢
      • 1970-01-01
      • 2018-09-04
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多