ボタンをクリックしたときにdijit/popupを使用してダイアログ・ウィジェットを表示しています。以下のドキュメントでは、dijit/popupを使用してポップアップを制御する方法について説明します。次のようにDojo - エスケープ・キー・プレスでdijit/popup cancelを無効にする
https://dojotoolkit.org/reference-guide/1.10/dijit/popup.html
コードは次のとおりです。
define(["dijit/popup"], function(popup){
...
// wrap the pop-up widget and position it offscreen so
// that it can be measured by the widget’s startup method
popup.moveOffScreen(dropDown);
// if the pop-up has not been started yet, start it now
if(dropDown.startup && !dropDown._started){
dropDown.startup();
}
// make the pop-up appear around my node
popup.open({
parent: this,
popup: dropDown,
around: this.domNode,
orient: ["below-centered", "above-centered"],
onExecute: function(){
popup.close(dropDown);
},
onCancel: function(){
popup.close(dropDown);
},
onClose: function(){
}
});
...
ポップアップウィジェットは、そのキャンセルを通知するとき、またはESCときのdijit /ポップアップのデフォルトの動作は、どちらかonCancelコールバック関数を呼び出すことですがキーが押された:ときESCAP
https://dojotoolkit.org/reference-guide/1.10/dijit/popup.html#keyboard-handling
私はこの出来事を見ることができますeキーが押されていますが、ESC(またはTAB)キーを押してダイアログを閉じないようにしたいのですが、どうしたらいいですか?ユーザーがEscキーを押した結果、onCancelコールバックが実行されたときを検出するにはどうすればよいですか?
また、エスケープキーが押されたときにのみ、onCancelを呼び出すdijit/popupの防止方法を教えてください。
ありがとう私は私のシナリオでこれをテストする必要があります。ドロップされたウィジェットに対してESCが無視されるようにする必要がありますが、別のウィジェットの伝播を防ぐことはできません。私の場合、ArcGIS Javascript API Drawツールバーはエスケープを使用してマップ上にフィーチャーを描画しないようにしていますので、これを動作させたい、ポップアップダイアログを開いたままにしておきます。 – user2486488
このロジックをイベントハンドラに追加する必要がある場合があります。つまり、stopProgation()を呼び出して描画を停止してから戻ることが必要な場合があります。 – pgianna
私はこれをやろうとしましたが、マップ描画ツールからESCキーが伝播するのを防ぐことができないようですが、esriウィジェットはどのハンドラによっても傍受されないようです。ポップアップを開くと、ウィンドウ/マップ/マップレイヤーにグローバルkeydownハンドラを添付します。描画を開始してもキープレスをインターセプトしません。 – user2486488