有关textarea发出事件后 target currenttarget值 的讨论
<?xml version="1.0" encoding="utf-8"?>
<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="306" height="377"
title="新建函数"
>
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.managers.PopUpManager;
private var inputString:String;
private function confirm(e:MouseEvent):void
{
PopUpManager.removePopUp(this);
}
private function changeDisplay():void
{
//if(inputBox.text=="请在下面输入信息:")inputBox.text="";
inputString=inputBox.text;
displayBox.text=inputString;
trace(inputString);
}
private function inputClick(evt:MouseEvent):void
{
trace(evt.currentTarget.id);
trace(evt.currentTarget.name);
trace(evt.target.id);
trace(evt.target.name);
/* if(evt.target)
{
if(inputBox.text.localeCompare("在这里输入信息")==0)
{
inputBox.text="";
trace("清空");
}
else
trace("不等");
}
else if(evt.target.id=="b7")
{
trace("b7 is selected");
} */
}
]]>
</fx:Script>
<s:VGroup id="mainGroup" width="285" horizontalAlign="center" top="10" height="324" paddingLeft="10" x="10" paddingRight="10"> <!--主框架-->
<s:BorderContainer height="80" width="100%" borderVisible="true"> <!-- 显示-->
<s:RichText id="displayBox"
top="10" width="100%"
>
<s:text>请在下面输入信息</s:text>
</s:RichText>
</s:BorderContainer>
<s:Group width="100%"> <!--输入-->
<s:TextArea id="inputBox"
height="50" width="100%" x="0" fontSize="15"
change="changeDisplay()"
click="inputClick(event)"
>
<s:text>在这里输入信息</s:text>
</s:TextArea>
</s:Group>
<s:HGroup width="100%" height="152" paddingTop="10"> <!--控制面板-->
<s:VGroup width="180" height="100%" paddingLeft="0"> <!--输入面板-->
<s:TileGroup requestedColumnCount="5" requestedRowCount="3" width="179" horizontalGap="6" verticalGap="6" fontSize="15" fontWeight="bold" fontFamily="中易黑体"> <!--按钮-->
<s:Button id="b7" width="30" height="30" label="7" click="inputClick(event)"/>
<s:Button width="30" height="30" id="b8" label="8"/>
<s:Button width="30" height="30" id="b9" label="9"/>
<s:Button width="20" height="30" id="bAdd" label="+"/>
<s:Button width="30" height="30" id="bSqrt" label="^" fontSize="12"/>
<s:Button width="30" height="30" id="b4" label="4"/>
<s:Button width="30" height="30" id="b5" label="5"/>
<s:Button width="30" height="30" id="b6" label="6"/>
<s:Button width="30" height="30" id="bSubstract" label="-"/>
<s:Button width="30" height="30" id="ba" label="("/>
<s:Button width="30" height="30" id="b1" label="1"/>
<s:Button width="30" height="30" id="b2" label="2"/>
<s:Button width="30" height="30" id="b3" label="3"/>
<s:Button width="30" height="30" id="bb" label="*"/>
<s:Button width="30" height="30" id="bc" label=")" fontSize="15"/>
</s:TileGroup>
<s:HGroup>
<s:Group width="66" > <!--“0”-->
<s:Button width="100%" label="0" x="0" height="30" fontWeight="normal" fontSize="15"/>
</s:Group>
<s:TileGroup width="106" height="20" fontWeight="bold" fontSize="15"> <!--"点号,除号 退格"-->
<s:Button width="30" height="30" label="." fontWeight="bold"/>
<s:Button width="30" height="30" label=""/>
<s:Button width="30" height="30" label="←" fontSize="10" fontStyle="normal" fontWeight="bold"/>
</s:TileGroup>
</s:HGroup>
</s:VGroup>
<s:VGroup width="77" height="100" paddingLeft="5" paddingRight="0" paddingTop="5" gap="15"> <!--函数面板-->
<s:Button id="numberB" label="数值 ▼" width="65" />
<s:Button label="函数 ▼" width="65"/>
<s:Button label="单位 ▼" width="65"/>
</s:VGroup>
</s:HGroup>
<s:HGroup width="100%" paddingRight="10" verticalAlign="contentJustify" paddingLeft="90" gap="10">
<s:Button label="取消" width="65" click="PopUpManager.removePopUp(this);"/>
<s:Button label="确定" width="65" click="confirm(event)"/>
</s:HGroup>
</s:VGroup>
</s:TitleWindow>
测试:
单击inputBox后结果如下:
inputBox
TextArea851
textDisplay
RichEditableText889
下面是在目标阶段和冒泡阶段捕获事件
我们从中可以看出两点
1 textarea包含在richeditable外面
2 因为richeidtable没有注册监听,在textarea里注册了监听,
所以在目标阶段时,什么也没做,上面的输出是在冒泡阶段textarea监听器输出的。
单击textarea后,所以输出时的target是richeditable,currenttarget是textarea
结论:richeditable是目标,textarea是冒泡阶段
扩展一下:
上面主要是想让textarea和button都能在Click事件中响应,并通过事件对象e来判断
如果想找到textarea就必须用e.currenttarget,那么button怎么办呢,其实button也可以e.currenttarget来找到,因为单击按钮时,在目标阶段捕猎按钮事伯,所以它currenttarget和target都是一样,一个值。
另外还想说点跟事件有关的话题
拿单击事件举例,舞台上有一个panel,panel中有多个组件都有单击事件,它们都可以是事件的发送者。你可以在舞台上注册监听(addEventListener),也可以panel中注册监听,也可以在button中注册监听,注册事件监听在哪里都可以。监听器也可以是任意实例对象的方法