AS3中的TextField - 编写单击侦听器

时间:2009-12-20 23:27:44

标签: flex actionscript-3

我想在舞台上添加一段简单的文字,并在用户点击它时添加一个监听器来做某事。

这是我的TextLink类:

package some.package
{
    import flash.display.Sprite;
    import flash.external.ExternalInterface;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;

    public class TextLink extends Sprite
    {
        public var tf:TextField = new TextField();
        public var bspr:Sprite = new Sprite();

        public function TextLink(tx:int, ty:int, tft:String):void
        {   
            tf.text = tft;
            tf.x = tx;
            tf.y = ty;
            tf.autoSize = TextFieldAutoSize.LEFT;
            bspr.addChild(tf);
            this.addChild(tf);
        }
    }
}

这就是我和听众一起呼唤它的方式:

public function test_array_of_objects():void
{     
 var tmp:TextLink = new TextLink(30, 30, "some text");
 tmp.addEventListener(MouseEvent.CLICK, roverNotify); 
 addChild(tmp);       
}

protected function roverNotify(e:Event):void
{
    ExternalInterface.call("console.log", "got a click");
}

......但由于某种原因,我没有得到消息。 我已成功导入所有内容。关于我还能尝试什么的任何想法?

4 个答案:

答案 0 :(得分:1)

函数TextLink在开头是否需要这样的东西: var tf:Text = new Text();

答案 1 :(得分:1)

您的TextLink类是事件调度程序吗?您正在尝试向TextLink对象添加侦听器,但是单击侦听器需要附加到您在TextLink中使用的文本字段。 TextLink需要是某种DisplayObject才能继承调度功能。

此外,构造函数不应指定返回类型(因为它们只是自己返回) - :void不应该存在于TextLink构造函数的位置。

答案 2 :(得分:1)

单击Sprite或触发事件是否有问题?如果是前者,您可以尝试添加以下代码。

tmp.mouseChildren = false;
tmp.buttonMode = true;

答案 3 :(得分:0)

ExternalInterface.call("console.log", "got a click");

你有一个像这样定义的JavaScript函数??:

function console.log(inputString) {
    //do something
}

编辑:没关系,忘了Firebug。

此外,TextLink不需要是事件调度程序,但您可能希望TextLink将其 mouseChildre n属性设置为false(除非您需要能够选择该文本),这样您就不会无意中触发 TextField buttonMode 上的事件为真。

编辑:另外,有什么意义?:

var bspr:Sprite = new Sprite();
bspr.addChild(tf);

最终修改

这个怎么样? http://code.google.com/p/fbug/issues/detail?id=1494

  

是的,你是对的,在FF3中只有当页面有注入时才会注入控制台   javascript并使用window.console。

     

如果在Flash加载之前放置任何访问控制台的js,它应该可以工作,例如

<script>
    var triggerFirebugConsole = window.console;
</script>
  

如果有效,请告诉我们。我们不太可能很快解决这个问题。