2017-02-15 11 views
1

私は作成しているwebappでcodemirrorを使用していますが、私はそのページにいくつかのエディタを持っています。元に戻すとやり直しボタンもあり、機能します。しかし、私はifステートメントを使ってどれがフォーカスされているのかを判断し、アンドゥまたはリドゥ機能を対応するテキストボックスに適用しない限り、1つのエディタを取り消すように設定できます。私はjQueryとJavaScriptの両方でいくつかのバリエーションを試しましたが、無駄です。これは、私が働くことを試みているコードブロックの1つです。コードミラー設定を保持する実際の変数は "codeeditor1"、 "#editor1"はテキストボックスのIDです。codemerrorエディタのフォーカスを検出

if ($("#editor1").is(':focus')) { 
    undo.addEventListener('click', function() { 
     codeeditor1.undo(); 
    }, false); 
    redo.addEventListener('click', function() { 
     codeeditor1.redo(); 
    }, false); 
} 

また、 "cm.hasFocus()" = booleanのドキュメントに従ってこれを試しました。

if (codeeditor1.hasFocus() == true) { 
    undo.addEventListener('click', function() { 
     codeeditor1.undo(); 
    }, false); 
    redo.addEventListener('click', function() { 
     codeeditor1.redo(); 
    }, false); 
} 

私は論理的なコードの配置のためにこれを試しましたが、まだそれは運がありません。おそらく、それはコード・エラーの方法のバグでしょうか?

undo.addEventListener('click', function() { 
    if (codeeditor1.hasFocus() == true) { 
     codeeditor1.undo(); 
    } 
}, false); 

redo.addEventListener('click', function() { 
    if (codeeditor1.hasFocus() == true) { 
     codeeditor1.redo(); 
    } 
}, false); 

答えて

0

オーケーしてみてください!だから、私はそれを理解した。

問題は(私は正しく考えていませんでした)ユーザーがボタンを押したときにフォーカスが取り除かれ、それが "hasFocus"の結果が偽であることを意味するテストを試みることです。そこで、これを回避するために、変数を作成しました。変数は、編集者の1人が1、2、または3のいずれかにフォーカスしたときに更新されます。次に、変数の値が何であるかをボタンのクリックでチェックしてから、対応するエディタにフォーカスを再適用してから、今すぐフォーカスしているエディタでやり直してください。

var detectfocus = "0"; 

codeeditor1.on('focus', function() { 
    detectfocus = "1"; 
}); 
codeeditor2.on('focus', function() { 
    detectfocus = "2"; 
}); 
codeeditor3.on('focus', function() { 
    detectfocus = "3"; 
}); 


undo.addEventListener('click', function() { 
    if (detectfocus === "1") { 
     codeeditor1.focus(); 
     codeeditor1.undo(); 
    } else if (detectfocus === "2") { 
     codeeditor2.focus(); 
     codeeditor2.undo(); 
    } else if (detectfocus === "3") { 
     codeeditor3.focus(); 
     codeeditor3.undo(); 
    } 
}, false); 

redo.addEventListener('click', function() { 
    if (detectfocus === "1") { 
     codeeditor1.focus(); 
     codeeditor1.redo(); 
    } else if (detectfocus === "2") { 
     codeeditor2.focus(); 
     codeeditor2.redo(); 
    } else if (detectfocus === "3") { 
     codeeditor3.focus(); 
     codeeditor3.redo(); 
    } 
}, false); 
1

if(editor.hasFocus() == true ) 
     // This editor is Codemirror object 
     // not jquery element. 
    } 
+0

回答ありがとうございます。私はこれを試しましたが、まだ登録していないようです。ドキュメントをたどり、 "cm.hasFocus()"メソッドがあると言いますが、それを正しく取得できないようです。 – AlphaDaemon

関連する問題