내가 만들고있는 웹 앱에서 codemirror를 사용하고 있으며 페이지에 여러 편집기가 있습니다. 실행 취소 및 다시 실행 버튼도 있으며 작동합니다. 그러나 if 문을 사용하여 포커스 된 항목을 결정한 다음 해당 텍스트 상자에 실행 취소 또는 다시 실행 기능을 적용하지 않는 한 한 편집기 만 실행 취소하도록 설정할 수 있습니다. jQuery와 JavaScript에서 몇 가지 변형을 시도했지만 아무 소용이 없습니다. 이것은 내가 작업하려고 시도하는 코드 블록 중 하나입니다. codemirror 설정을 보유하는 실제 변수는 "codeeditor1"이고 "# editor1"은 텍스트 상자의 ID입니다.
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);
}
나는 이제 논리적 코드 배치를 위해 이것을 시도했지만 여전히 운이 좋지 않습니다. 아마도 codemirror 방법의 버그일까요?
undo.addEventListener('click', function() {
if (codeeditor1.hasFocus() == true) {
codeeditor1.undo();
}
}, false);
redo.addEventListener('click', function() {
if (codeeditor1.hasFocus() == true) {
codeeditor1.redo();
}
}, false);
괜찮아! 그래서 나는 그것을 알아 냈습니다.
문제는 사용자가 버튼을 눌렀을 때 당연히 포커스가 제거되고 "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);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다