Ext JS に関しては,新しい記事は Sunvisor Lab. ExtJS 別館 にあります。そちらもよろしくお願いいたします。
ExtJS Window でダイアログのデフォルトボタンみたいにEnterキーを拾いたい
投稿者:sunvisor 投稿日時:2011/01/17(月) 10:04
Windowsのダイアログとかでよく使うデフォルトボタン。ダイアログが表示されているときにEnterキーが押されると,そのボタンが押されたことになる,というやつ。同様にキャンセルボタン,ESCキーが押されるとそのボタンが押されたことになる。
これをExtJSでやろうと思います。
この機能を実現するには,Ext.KeyNav を使います。
Ext.KeyNav は,エレメントに設定します。コンストラクタにエレメントを渡して new して使います。ですので,Window から getEl() して,Ext.KeyNavのインスタンスを作ることにします。エレメントができてないといけないので,Window の afterrender イベントで,それをやってみます。
WinHoge = Ext.extend(WinChgPassUi, {
initComponent: function() {
WinHoge.superclass.initComponent.call(this);
this.on('afterrender', this.onAfterrender, this);
this.btnOK.on('click', this.onBtnOKClick, this);
this.btnCancel.on('click', this.onBtnCancelClick, this);
},
/**
* Window のAfterrenderイベントハンドラ
* @param Ext.component cmp
*/
onAfterrender: function (cmp) {
// Enterキーと ESCキーの動作を定義
var el = cmp.getEl();
var nav = new Ext.KeyNav(el, {
enter: this.onBtnOKClick,
esc: this.onBtnCancelClick,
scope: this
});
},
onBtnOKClick: function () {
// OKの時の処理
:
:
this.close();
},
onBtnCancelClick: function () {
this.close();
}
onAfterRender イベントハンドラの中で,KeyNavを作っています。コンストラクタの一つ目の引数はエレメントなので,引数として渡されたコンポーネントからgetEl()でエレメント取得して渡しています。二つ目の引数はイベントハンドラ定義で,Enter キーと ESC キーのイベントハンドラを,それぞれのボタンに割り当てています。それだけです。簡単でしたね。
