[转]关于event的两个常被忽略的api:isDefaultPrevented()和preventDefault()
今天在robert penner(as3 singal的作者)的一篇blog文中顺藤摸瓜到了darron schall的另外一篇blog文(Creating Default, Cancelable Event Handlers),仔细看了一下,忽然有种相见恨晚的感觉。
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
。
另请参见
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的默认行为是显示文字),于是,新的处理方法为:
1 private function init():void { 2 _inputTf = new TextField(); 3 _inputTf.width = 100; 4 _inputTf.border = true 5 _inputTf.type = TextFieldType.INPUT; 6 7 _inputTf.addEventListener(TextEvent.TEXT_INPUT, onTextInput2); 8 9 this.addChild(_inputTf); 10 } 11 12 private function onTextInput2(event:TextEvent):void { 13 if (StringUtils.checkStringNum(_inputTf.text + event.text) > 6) { 14 event.preventDefault(); 15 //这里也可以添加一些截取文本的逻辑,例如拷贝进来10个字符,截掉其中的6个 16 } 17 }
Boolean — 如果成功调度了事件,则值为 true 。 值 false 表示失败或对事件调用了 preventDefault() 。 |
FocusEvent.KEY_FOCUS_CHANGE