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 ; } }
相关推荐
textField.text = "Hello, World!"; textField.rotation = 45; // 设置旋转角度为45度 ``` 在ActionScript 3.0中,你应使用`transform.matrix`的`rotate()`方法: ```actionscript var textField:TextField = ...
`Ext.form.TextField`是Ext JS库中的一个组件,用于创建基本的文本输入字段。它在Web应用程序中广泛用于收集用户输入的数据,如用户名、搜索关键词等。以下是对`Ext.form.TextField`的一些主要特性和配置选项的详细...
每个格子限制一个字符,当前选中的textfield输入完字符后,光标提前跳到后面的textfield进入编辑状态;可以隔着格子寻找空的格子进行跳转,后面的空的格子输入完字符可以进行前面的空格子输入;方便身份证号和车牌号...
let currentText = (textField.text ?? "") as NSString let newLength = currentText.length + string.count - range.length return newLength } ``` 这段代码会确保用户最多只能输入10个字符,一旦超过这个...
textField输入中文字符时,直接在代理方法里限制会有问题,因为系统会将高亮部分一起算入字符数,从而造成明明没有到达限制上限,输不进去的情况。 该方法利用分类与runtime结合,用block作为回调,只需一行代码即可...
很适合开始学习J2me的编程的朋友, 从配置环境,到第一个程序,很详细一步步演示。压缩包只包含 .avi 视频文件,没有多余的其他文件,绝对放心吧。这是适合刚接触j2me ,或者想开发手机编程但是 无从下手的朋友,很...
flash action script 经典字典教程大全,学flash必备 -- --(递减) ++ ++(递增) ! !(逻辑 NOT) != !=(不等于) !== !==(不全等) % %(模) %= %=(模赋值) & &(按位 AND 运算符) && ...
另外,使用TextField.getLineInfo()和TextField.getCharIndexAtPoint()可以获取文本布局信息,帮助优化滚动和选择操作。 六、自定义滚动条 尽管ActionScript 3提供内置的滚动条,但它们的样式和功能可能无法满足...
标题提到的“iOS——可限制最大字符的textfield”就是一个这样的解决方案。 这个解决方案可能包含以下几个关键功能: 1. **最大字符限制**:通过监听`UITextField`或`UITextView`的`textDidChange`事件,我们可以...
textField.inputView = UIView(frame: CGRect(x: 0, y: 0, width: textField.frame.width, height: textField.frame.height)) let textView = UITextView(frame: .zero, textContainer: textContainer) textView....
`TextField-InputView`项目就是基于这个特性进行深入实践的开源库,它的目标是终结传统注册类以及复杂的信息采集类,让开发者能更便捷地定制输入视图。 `UITextField`的`inputView`属性通常用来替代系统默认的键盘...
在本文中,我们将深入探讨如何使用Adobe Flash(现称为Adobe Animate)创建一款炫酷的“雪花栗子”动画效果。这个效果允许用户自定义文本,为数字营销、网站装饰或个人项目增添视觉吸引力。首先,让我们理解Flash的...
JTextField textField1; JTextField textField2; JTextField textField3; JLabel label1,label2,label3,label4; myFrame(){ super("GUI exercise"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ...
textField.rx.text.orEmpty .skip(1) // 跳过初始空值 .subscribe(onNext: { text in // 处理文本输入 }).disposed(by: disposeBag) ``` ### ScrollView与RxSwift 对于UIScrollView,可以监听其滚动事件或内容...
textField.text = textField.attributedPlaceholder?.string UIView.animate(withDuration: 0.3) { textField.contentOffset = CGPoint(x: 0, y: -16) // 调整偏移量使占位符向上移动 } } else { textField....
在提供的压缩包中,"ext-3-TextField-sample.rar" 涉及到的是ExtJS 3.x版本中的TextField组件,这是一个基本的用户输入控件,常用于收集用户在网页上的文本信息。这个示例着重介绍了如何创建和使用TextField。 ...
textField.setText("Enter your text here..."); // 添加到容器 frame.getContentPane().add(textField); frame.pack(); frame.setVisible(true); } } ``` 在这个例子中,我们创建了一个30列的`TextField`...
textField.text = "这是要滚动的文字"; addChild(textField); ``` 为了实现滚动功能,我们需要设置TextField的一些属性,如autoScroll、scrollV(垂直滚动条)和scrollH(水平滚动条)。例如: ```actionscript ...
在本示例中,"EXT dojochina文本框示例Ext.form.TextField.rar"是一个压缩包,包含了EXT框架中关于`Ext.form.TextField`组件的示例代码。 `Ext.form.TextField`是EXT框架中的一个核心组件,用于创建基本的输入字段...