今天在robert penner(as3 singal的作者)的一篇blog文中顺藤摸瓜到了darron schall的另外一篇blog文(Creating Default, Cancelable Event Handlers),仔细看了一下,忽然有种相见恨晚的感觉。

 
确实是啊~rober penner的singal我不是第一天就知道了,之后再arpg的demo里面也有用过,只可惜今天才认真看了一下penner的这篇文章,也很可惜在schall发布这个文章的两年后才看到,真遗憾
 
好了,下面来谈谈这两个api的官方documentation描述:
 
preventDefault

public function preventDefault():void

如果可以取消事件的默认行为,则取消该行为。

许多事件都有默认执行的关联行为。例如,如果用户在文本字段中键入一个字符,则默认行为就是在文本字段中显示该字符。 由于可以取消 TextEvent.TEXT_INPUT 事件的默认行为,因此您可以使用 preventDefault() 方法来防止显示该字符。

不可取消行为的一个示例是与 Event.REMOVED 事件关联的默认行为,只要 Flash Player 从显示列表中删除显示对象,就会生成该事件。 由于无法取消默认行为(删除元素),因此 preventDefault() 方法对此默认行为无效。

您可以使用 Event.cancelable 属性来检查是否可以防止与特定事件关联的默认行为。 如果 Event.cancelable 的值为 true,则可以使用 preventDefault() 来取消事件;否则,preventDefault() 无效。

另请参见

 
isDefaultPrevented () 方法

public function isDefaultPrevented():Boolean

检查是否已对事件调用 preventDefault() 方法。如果已调用 preventDefault() 方法,则返回 true;否则返回 false

另请参见

 
关于api的作用我解析不够权威,所以粘贴了官方文档,而我对schall的文章例子也不是非常感兴趣,所以我举一个我以前用到的实战例子,怎么实现文本输入限制字数的功能
 
当然,as3 api的textfeidl提供了一个maxChars的api,不过这个中看不中用大家也知道的~
 
以前我的实现方法是
监听textfield的TextEvent.TEXT_INPUT事件和Event.CHANGE事件:
input事件触发时,判断一下当前是否合法(超出长度),没有超出长度则保存一个合法的字符串
change事件触发时,判断一下新的字符是否合法,不合法的话,替换回原来保存的合法字符串
如下:
private function init():void {
_inputTf = new TextField();
_inputTf.width = 100;
_inputTf.border = true
_inputTf.type = TextFieldType.INPUT; _inputTf.addEventListener(TextEvent.TEXT_INPUT, onTextInput);
_inputTf.addEventListener(Event.CHANGE, onChange); this.addChild(_inputTf);
} private function onTextInput(event:TextEvent):void {
if (StringUtils.checkStringNum(_inputTf.text) <= 6) {
_tempStr = _inputTf.text;
}
} private function onChange(event:Event):void {
var curNum:int = StringUtils.checkStringNum(_inputTf.text);
if (curNum > 6) {
_inputTf.text = _tempStr;
}
}

现在发现textinput这个事件的cancelable是为true的,则表明可以通过preventDefault来取消默认行为(textfield的默认行为是显示文字),于是,新的处理方法为:

 private function init():void {
_inputTf = new TextField();
_inputTf.width = 100;
_inputTf.border = true
_inputTf.type = TextFieldType.INPUT; _inputTf.addEventListener(TextEvent.TEXT_INPUT, onTextInput2); this.addChild(_inputTf);
} private function onTextInput2(event:TextEvent):void {
if (StringUtils.checkStringNum(_inputTf.text + event.text) > 6) {
event.preventDefault();
//这里也可以添加一些截取文本的逻辑,例如拷贝进来10个字符,截掉其中的6个
}
}
现在就一个事件处理器就能解决,而且StringUtils.checkStringNum方法也少调用一次了,非常不错~
 
btw:关于isDefaultPrevented ()这个api的使用,可以看schall的例子,多数用于我们自定义自己默认的事件行为的实现上有应用到,而且发出来的事件也要把cancelable设置为true
 
 
扩展一下:
 
1.EventDispatcher.dispatchEvent()这个api是有个Boolean的返回值的
返回

  Boolean — 如果成功调度了事件,则值为 true。 值 false 表示失败或对事件调用了 preventDefault()。 

这篇文章的应用思想不错,check it out

 
2.常用的可以取消的事件有(cancelable为true):
FocusEvent.MOUSE_FOCUS_CHANGE
FocusEvent.KEY_FOCUS_CHANGE
TextEvent.TEXT_INPUT

[转]关于event的两个常被忽略的api:isDefaultPrevented()和preventDefault()的更多相关文章

  1. event 实现两个程序的交互

    event.wait() 等待一定时间,或者当遇到event.set() 时,继续执行 event.clear() 清除信号 event.set() 设置信号 event.isset() 判断信号 例 ...

  2. 两个容易被忽略的mysql知识

    原文:两个容易被忽略的mysql知识 为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql ...

  3. .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化

    原文:.NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化 最近我大幅度重构了我一个库的项目结构,使之使用最新的项目文件格式(基于 Microsoft.NET.Sdk)并使 ...

  4. C++:类中两个易被忽略的默认函数

    C++的自定义类中有六个默认的函数,即如果用户没有显式定义这些函数时,C++编译器会类中生成这些函数的默认形式.除了大家所熟知的构造函数.拷贝构造函数.赋值函数和析构函数外,C++为自定义类 还提供了 ...

  5. BigDecimal常被忽略的问题

    一:相除精度丢失的问题 BigDecimal的api除法相对加减乘要实现的复杂多了,只介绍常用的我遇到的问题: 问题:两数相除,如果9/3=3整除没问题,但是10/3=0.33333333...... ...

  6. 小议常被忽略的a标签:visited属性的特殊用法

    CSS1/CSS2对于a定义了4个伪类, :link  a标签未访问时的样式 :active  a标签mousedown时的样式 :hover  a标签mouseover时的样式 :visited  ...

  7. JavaScript之parseInt()数值转换常被忽略的问题

    使用parseInt()你可以从字符串中获取数值,该方法接受另一个基数参数,这经常省略,但不应该.当字符串以”0″开头的时候就有可能会出问题,例如,部分时间进入表单域,在ECMAScript 3中,开 ...

  8. iptables配置顺序-两条规则会忽略后边的

    oracle在centos本机能够正常访问,关闭防火墙也能够远程访问,但是一旦开启防火墙则不能远程访问 尝试添加规则iptables -A INPUT -m state --state NEW -m ...

  9. MYSQL-JDBC批量新增-更新-删除

    目录 1 概述 2 开启MYSQL服务端日志 3 深入MYSQL/JDBC批量插入 3.1 从一个例子出发 3.2 JDBC的批量插入操作 3.3 两个常被忽略的问题 3.5 误区 4 MYSQL/J ...

随机推荐

  1. 深入理解ASP.NET 5的依赖注入

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:ASP.NET 5整个底层都架构于依赖注入机制之下,今天介绍的文章详细介绍了内置依赖注 ...

  2. 从官方ROM中提取原生APK

    背景:由于自己手机总出现android.process.acore问题,最后发现是被自己精简掉了日历相关应用,故寻找提取原生apk. 注:解决方案主要是在机锋论坛上看到的. 环境要求:需要电脑安卓ja ...

  3. mageView图片显示出来 ()

    ImageView图片显示出来: igSign 是 ImageView的实例 igSign.setImageDrawable(getResources().getDrawable(R.drawable ...

  4. 遍历List过程中删除元素的正确做法(转)

    遍历List过程中删除元素的正确做法   public class ListRemoveTest {     3 public static void main(String[] args) { 4 ...

  5. ☆ ☆ VMware9虚拟机安装MAC OS X Mountain Lion 10.8.2详细图文教程 (转)

    参考  http://diybbs.zol.com.cn/1/34037_699.html 然后对安装的Mac系统进行升级到最新版本. 安装mac系统之后,再安装VMTOOLS darwin. 方法可 ...

  6. 关于MFC OpenGL环境配置的一点总结

    复制include时要小心..看vs给你load哪一个..名字一样..东西可不一定一样哦 http://www.cppblog.com/wicbnu/archive/2010/09/30/128123 ...

  7. STL UVA 11995 I Can Guess the Data Structure!

    题目传送门 题意:训练指南P186 分析:主要为了熟悉STL中的stack,queue,priority_queue,尤其是优先队列从小到大的写法 #include <bits/stdc++.h ...

  8. POJ2942 Knights of the Round Table(点双连通分量 + 二分图染色)

    题目大概说要让n个骑士坐成一圈,这一圈的人数要是奇数且大于2,此外有些骑士之间有仇恨不能坐在一起,问有多少个骑士不能入座. 双连通图上任意两点间都有两条不重复点的路径,即一个环.那么,把骑士看做点,相 ...

  9. [转]error while loading shared libraries 错误解决办法总结

    http://blog.csdn.net/wallwind/article/details/7580659 错误信息: error while loading shared libraries: li ...

  10. HDU 2851 (最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2851 题目大意:给出N条路径,M个终点(是路径的编号) .重合的路径才算连通的,且路径是单向的.每条路 ...