- 2009年5月13日 21:21
- ActionScript 3.0
デフォルト動作
ActionScript3.0のイベントアーキテクチャには、デフォルト動作と呼ばれる副次的な処理が登録されているものがあります。代表的なものにTextEvent.TEXT_INPUTがあり、ユーザーがTextField内でキー入力をすると、自動的に文字列が追加されるのはこのためです。
Event.preventDefault()
このようなデフォルト動作は、実は拒否(実行させない)することが出来ます。
それが、Event.preventDefault()メソッドです。このインスタンスメソッドは、イベント送出後、リスナー関数がイベントをキャッチした段階で呼び出す事で、そのイベントがもつデフォルト動作を拒否することが出来ます。
var textfield:TextField = addChild(new TextField()) as TextField;
textfield.type = TextFieldType.INPUT
textfield.addEventListener(TextEvent.TEXT_INPUT,textInputHandler)
private function textInputHandler(e:TextEvent):void {
e.preventDefault()//文字入力の自動化を拒否!
}
Event.isDefaultPrevented()
イベントのデフォルト動作は、カスタムイベントでも実装することが可能です。そのキーとなるのがEvent.isDefaultPrevented()メソッドです。カスタムイベントについての詳細は割愛しますが、ポイントとしてはイベントオブジェクトを生成時にEvent.cancelableプロパティをtureにし、デフォルト動作無効可能であることを明示的にします。次に、Event.dispatchEvent()メソッドでイベントを送出後、Event.isDefaultPrevented()メソッドを呼び出し、リスナー関数内でEvent.preventDefault()が呼び出されていない...つまりデフォルト動作が拒否されていない事を確認します。拒否されていない場合、Event.isDefaultPrevented()はfalseを返すので、その中でデフォルトで実行される処理を書けばよいわけです。下記に、サンプルです。
package {
import flash.display.MovieClip;
public class TestExample extends MovieClip {
public function TestExample():void {
addEventListener(CustomEvent.EXAMPLE, exampleHandler)
var e:CustomEvent = new CustomEvent(CustomEvent.EXAMPLE, false,true);
dispatchEvent(e)
//デフォルト動作処理
if (!e.isDefaultPrevented()) {
//デフォルト動作を記述
}
}
private function exampleHandler(e:CustomEvent):void {
//デフォルト動作の拒否
e.preventDefault();//このメソッドが呼び出されているとデフォルト動作は動かない。
}
}
}
import flash.events.Event;
class CustomEvent extends Event {
public static const EXAMPLE:String = "example"
public function CustomEvent(type:String = null, bubbles:Boolean = false, cancelable:Boolean = false):void {
super(type, bubbles, cancelable)
}
}



