要するに
ネイティブ イベントをリッスンしているときに、イベントがリスナーに伝達される前に CKEditor によって何らかの方法で使用されたかどうかを検出したり、まったく伝達されないようにする方法はありますか?
使用事例
が押されたkeyup
ことを検出するために、jQueryを使用してイベントをリッスンしています。escapeその場合、変更を破棄するかどうかをユーザーに確認するメッセージが表示され、CKEditor インスタンスが破棄され、その要素が DOM から削除されます。
$('body').on('keyup', function(e){
if(e.which==27){
CKEDITOR.instances.myDiv.destroy();
$('#myDiv').remove();
}
});
ここでの問題は、CKEditor を使用すると、ユーザーがescapeキーを使用して特定の UI 要素を操作できることです。たとえば、ダイアログ ウィンドウまたはドロップダウン リストを閉じます。
したがって、 CKEditor がまだイベントを使用して独自の UI 要素を閉じていない場合にのみ、イベントはそのコードを実行する必要があります。
試み
ダイアログ ウィンドウが開いているかどうかを検出するためにdialogShow
およびイベントをリッスンしようとしたため、アクションは無視されます。dialogHide
これは、次の 2 つの理由で機能しませんでした。
- CKEditor が最初にイベントを処理するため、イベントがリスナーに伝達されるまでに、ダイアログ ウィンドウは開かれず、コードが実行されます。
- 機能する場合でも、ドロップダウン リストはイベントをトリガーしないため、機能しません。
dialog*
アイデア
CKEditor の仕組みについて解決策を考え出すのに十分な知識はありませんが、次のようなものを探していると思います。
- イベントの伝播を防ぐための CKEditor の設定:
CKEDITOR.instances[0].noEventPropagation = true
- 元のイベント オブジェクトの指示:
if(event.CKEditorWasHere){/*do nothing*/}
- 私が使用できる機能を提供するプラグイン。
- 最悪のシナリオ:
dialogHide
自分のイベントを短時間抑制するために使用するイベントの setTimeout。
そう
たぶん、私は何かを完全に見落としています。これは、単純な解決策が必要な一般的な問題のように思えます。
御時間ありがとうございます。