0

Ace エディター (http://ace.ajax.org) を使い始めたばかりで、通常のエディターでは正常に動作しますが、「modal: true」オプションを持つ jquery-ui ダイアログ内に配置するとすぐに、入力テキスト以外のすべてを実行できます。つまり、選択したり、ctrl の組み合わせを使用したり、テキストを削除したりすることはできますが、文字を挿入することはできません。

その 'modal: true' オプションが通常の文字挿入にどのように干渉するか考えていますか? キーストロークがエディターに到達するのを止める可能性のある「stopPropagation」機能はありますか?

4

3 に答える 3

1

問題は、jquery-dialogsが、イベントの続行を許可する前に、ターゲット要素(この場合はAceエディターのtextarea)でz-indexを探すことでした。これを書いている時点で、これは彼らがこのチェックを行う場所です:

jquery.ui.dialog.jsは685行目から始まります。

create: function( dialog ) {
  if ( this.instances.length === 0 ) {
    ...
    setTimeout(function() {
      // handle $(el).dialog().dialog('close') (see #4065)
      if ( $.ui.dialog.overlay.instances.length ) {
        $( document ).bind( $.ui.dialog.overlay.events, function( event ) {
          // stop events if the z-index of the target is < the z-index of the overlay
          // we cannot return true when we don't want to cancel the event (#3523)


          // HERE's THE CHECK
          if ( $( event.target ).zIndex() < $.ui.dialog.overlay.maxZ ) {
            return false;
          }
        });
      }
    }, 1 );

これを処理する方法はいくつかありますが、最も簡単なのは、Aceのtextareaのz-indexを非常に高い値に設定することでした。これが私がこれを行ったCSSの部分です:

16211行目から始まるace_uncomplessed.js。

"\n" +
".ace_editor textarea {\n" +
"    position: fixed;\n" +
"    z-index: 2000;\n" +
于 2011-11-07T06:15:25.473 に答える
1

Ace のソースを編集するのではなく、jQuery を使用して CSS を微調整することで、これを実装することができました。

$('.ace_editor textarea').css('z-index','2000');
于 2012-03-22T16:07:05.090 に答える