2017-02-15 6 views
1

Я использую codemirror в webapp, который я создаю, и у меня есть несколько редакторов на странице. Также есть кнопки отмены и повтора, и они работают. Однако я могу только установить один редактор для отмены, если я не использую оператор if, чтобы определить, какой из них сосредоточен, а затем примените функцию отмены или повтора к соответствующему текстовому полю. Я пробовал несколько вариантов как в jQuery, так и в JavaScript, но безрезультатно. Это один из блоков кода, который я пытаюсь получить на работу. Фактическая переменная, содержащая настройку codemirror, называется «codeeditor1», «# editor1» является идентификатором текстового поля.Обнаружение фокуса редактора codemirror

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

Я также попытался это в соответствии с документацией метода «cm.hasFocus()» = логическое значение.

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

Я также попробовал это ради логического размещения кода, но до сих пор не повезло с ним. Возможно, это ошибка в методе codemirror?

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, 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

Смежные вопросы