【转自TICORE】【HOW TO 系列】讓 Flex 內不可選擇的文字超連結生效

本文探讨了在Flex中不可选择的TextField组件超链接功能失效的问题,并提供了一种通过暂时禁用FocusManager来解决该问题的方法。

在 Flash 內,不可選擇的 (unselectable) TextField 仍可保留 HTML 超連結功能但是 Flex 卻不行查文件上也有寫到 Label.selectable其實不光是 Label, Text 組件不行任何一個在 Flex App 下的 unselectable TextField 超連結都會失效這樣需要用到不可選擇的超連結文字時就很不方便

Flex 超連結失效測試程式:

   
<? xml version = " 1.0 "  encoding = " utf-8 " ?>
< mx:Application xmlns:mx = " http://www.adobe.com/2006/mxml "
   fontSize
= " 12 "  backgroundColor = " #F0F0F0 " >
 
< mx:Script >
  
<! [CDATA[
   import flash.events.
* ;
   import mx.managers.FocusManager;
   
   
public  function onTxtLink(evtObj:Event): void {
    textArea.text 
+= evtObj + " ";
   }

  ]]
>
 
</ mx:Script >
 
< mx:Label selectable = " false "  link = " onTxtLink(event) " >
  
< mx:htmlText >
   
<! [CDATA[Flex Label :  < a href = ' event:linkEvent ' > Link Event Text </ a >   |  ]] >
   
<! [CDATA[ < a href = ' http://ticore.blogspot.com '  target = ' _blank ' > Ticore ' s Blog</a>]]>
   </ mx:htmlText >
 
</ mx:Label >
 
 
< mx:Text selectable = " false "  link = " onTxtLink(event) " >
  
< mx:htmlText >
   
<! [CDATA[Flex Text :  < a href = ' event:linkEvent ' > Link Event Text </ a >   |  ]] >
   
<! [CDATA[ < a href = ' http://ticore.blogspot.com '  target = ' _blank ' > Ticore ' s Blog</a>]]>
   </ mx:htmlText >
 
</ mx:Text >
 
 
< mx:Button label = " Clear Log "  click = " textArea.text = ''; "   />
 
< mx:TextArea id = " textArea "  width = " 100% "  height = " 100% "   />
</ mx:Application >

於是花了不少力氣去追蹤原因
終於發現是 Flex 內的 FocusManager 刻意攔截下 unselectable TextField Focus 事件
這也間接造成超連結失效

既然知道問題是出在 FocusManager 上
問題就比較好處理了
以下是變通方式,讓 FocusManager 短暫失效一下~

   
<? xml version = " 1.0 "  encoding = " utf-8 " ?>
< mx:Application xmlns:mx = " http://www.adobe.com/2006/mxml "
   fontSize
= " 12 "  backgroundColor = " #F0F0F0 " >
 
< mx:Script >
  
<! [CDATA[
   import flash.events.
* ;
   import mx.managers.FocusManager;
   
   
public  function onTxtLink(evtObj:Event): void {
    textArea.text 
+= evtObj + " ";
   }

  ]]
>
 
</ mx:Script >
 
< mx:Label selectable = " false "  link = " onTxtLink(event) "
   rollOver
= " focusManager.deactivate() "  rollOut = " focusManager.activate() " >
  
< mx:htmlText >
   
<! [CDATA[Flex Label :  < a href = ' event:linkEvent ' > Link Event Text </ a >   |  ]] >
   
<! [CDATA[ < a href = ' http://ticore.blogspot.com '  target = ' _blank ' > Ticore ' s Blog</a>]]>
   </ mx:htmlText >
 
</ mx:Label >
 
 
< mx:Text selectable = " false "  link = " onTxtLink(event) "
   rollOver
= " focusManager.deactivate() "  rollOut = " focusManager.activate() " >
  
< mx:htmlText >
   
<! [CDATA[Flex Text :  < a href = ' event:linkEvent ' > Link Event Text </ a >   |  ]] >
   
<! [CDATA[ < a href = ' http://ticore.blogspot.com '  target = ' _blank ' > Ticore ' s Blog</a>]]>
   </ mx:htmlText >
 
</ mx:Text >
 
 
< mx:Button label = " Clear Log "  click = " textArea.text = ''; "   />
 
< mx:TextArea id = " textArea "  width = " 100% "  height = " 100% "   />
</ mx:Application >

Online Demo:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值