There is an old version Felx SDK bug(in my case it's Flex SDK v3.3.0.4852) that when TextField.selectable is set to false, link event on the textfield will be blocked. So if you have added html text including a link into the textfield, e.g.:
var textField:TextField = new TextField(); textField.htmlText = "This is a testing message. <a href='event:clickHandler'>Click</a> to see more."; textField.selectable = false;
Then when you click "Click", it will not trigger "clickHandler" function. This will also happen when the anchor's href value is a URL, e.g.:
var textField:TextField = new TextField(); textField.htmlText = "This is a testing message. <a href='http://www.google.com' target='_blank'>Click</a> to see more."; textField.selectable = false;
When click "Click", browser will not open the Google page in a new tab. But you can actually right click on the link and select "Open" to open it.
The previous two situations are both caused by selectable property set to false using Flex SDK 3.3.0.4852. I have three solutions to fix this:
1. Set selectable to true;
2. Change Flex SDK to newly version;
3. Register event listener to handle click event;
The first two solutions are simple, I'll give some more details on the third solution which will not change selectable attribute nor SDK. The main idea is register MouseClick event on the textfield, when user click the text, check whether the position is on the link. If the mouse click is on the link text, use "navigateToURL" function to open the link.
1. New a TextField object and set accordingly:
var textField:TextField = new TextField(); textField.htmlText = "Testing message. <a href='http://www.google.com' target='_blank'>Click</a> to see more."; textField.selectable = false; var textFmtLink:TextFormat = new TextFormat(); formatter.color = "0x3366BB"; formatter.underline = true;2. Use "formatFieldLinkText" function to formate the link text and register event listener to handle click event:
formatFieldLinkText(textField, textFmtLink); protected function formatFieldLinkText(textField:TextField, linkFormat:TextFormat):void { var fieldText:String = textField.text; var textFormat:TextFormat = textField.getTextFormat(); var formatedText:String = ""; var linkObjArray:Array = []; var textArray:Array = fieldText.split(/(<a\s[^>]+>.+?<\/a>)/gi ); var linkTextPattern:RegExp = new RegExp("(?i)[^>]*(?=</a>)" ); var linkUrlPattern:RegExp = /href\s*=\s*['"]([^'"]+)['"]/i; var linkTargetPattern:RegExp = /target\s*=\s*['"]([^'"]+)['"]/i ; for (var i:int = 0; i < textArray.length; i++) { //plain text if (textArray[i].toString().search(/(<a\s[^>]+>.+?<\/a>)/gi )==-1) { formatedText+=textArray[i].toString(); continue; } var linkText:String = linkTextPattern.exec(textArray[i]); // check if linkText is blank if (isBlank(linkText)) { return; } var linkUrl:Array = linkUrlPattern.exec(textArray[i]); var linkTarget:Array = linkTargetPattern.exec(textArray[i]); if (linkUrl==null) { return; } var linkObj:Object = new Object(); linkObj.href = linkUrl== null?"" :linkUrl[1]; linkObj.target = linkTarget== null?"" :linkTarget[1]; linkObj.linkBegin = formatedText.length; linkObj.linkEnd = formatedText.length + linkText.length; linkObjArray.push(linkObj); formatedText+=linkText; textField.addEventListener(MouseEvent.CLICK, hyperLinkClicked); } textField.text = formatedText; textField.setTextFormat(textFormat); for (var j:int = 0; j < linkObjArray.length; j++) { textField.setTextFormat(linkFormat, linkObjArray[j].linkBegin, linkObjArray[j].linkEnd); } var href:String = ""; var target:String = ""; function hyperLinkClicked (e:MouseEvent):void { var idx:int = e.currentTarget.getCharIndexAtPoint(e.localX, e.localY); if (posOnLink(idx)) { var request:URLRequest = new URLRequest(href); navigateToURL(request, target); } } // can optimize the search method function posOnLink(idx:int):Boolean { for (var k:int = 0; k < linkObjArray.length; k++) { if (idx >= linkObjArray[k].linkBegin && idx < linkObjArray[k].linkEnd) { href = linkObjArray[k].href; target = linkObjArray[k].target; return true ; } } return false ; } }
相关推荐
Ext.form.TextField最简单的用法.docx
每个格子限制一个字符,当前选中的textfield输入完字符后,光标提前跳到后面的textfield进入编辑状态;可以隔着格子寻找空的格子进行跳转,后面的空的格子输入完字符可以进行前面的空格子输入;方便身份证号和车牌号...
textField输入中文字符时,直接在代理方法里限制会有问题,因为系统会将高亮部分一起算入字符数,从而造成明明没有到达限制上限,输不进去的情况。 该方法利用分类与runtime结合,用block作为回调,只需一行代码即可...
textfield控件的实时监听
很适合开始学习J2me的编程的朋友, 从配置环境,到第一个程序,很详细一步步演示。压缩包只包含 .avi 视频文件,没有多余的其他文件,绝对放心吧。这是适合刚接触j2me ,或者想开发手机编程但是 无从下手的朋友,很...
flash action script 经典字典教程大全,学flash必备 -- --(递减) ++ ++(递增) ! !(逻辑 NOT) != !=(不等于) !== !==(不全等) % %(模) %= %=(模赋值) & &(按位 AND 运算符) && ...
方便集成可限制最大输入字符串的textfield/textview,并具备具备显示剩余输入字数,筛除emoji表情,自动设置换行返回,获取光标位置,设置光标位置的功能。
TextField-InputView, UITextField InputView模式:终结注册类、信息采集类
JTextField textField1; JTextField textField2; JTextField textField3; JLabel label1,label2,label3,label4; myFrame(){ super("GUI exercise"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ...
flash 旋转文本框,flash 旋转文本框,flash 旋转文本框,
ios-TextField自动换行.zip
给 TextField 菜单栏自定义复制和分享事件(以微信为例)
一组漂亮的 TextField 交互特效.zip,自定义uitextfields效果,灵感来自codrops,使用swift创建
TextField 自动换行
号码输入时即自动留出空格,匹配运营商类型(最好是后台判断返回数据)
Java中TextField类.pdf 学习资料 复习资料 教学资源
封装TextField,点击后下方弹出一个tableView列表展示数据,黑色蒙版点击收回,选中后填充textField. 支持纯代码创建 ,xib创建. 简单好用.自动获取textField的位置。
Flutter 自定义编辑框(根据TextFiled进行的扩展) , 包括边框、字体样式、输入文本格式等......
自动控制viewController的textView和textField被键盘遮挡问题,引入.h即可