2017-02-15 1 views
1

나는 만들고있는 webapp에서 codemirror를 사용하고 있으며 페이지에 여러 편집자가 있습니다. 실행 취소 및 다시 실행 버튼도 있으며 작동합니다. 그러나 if 문을 사용하여 포커스를 결정한 다음 해당 텍스트 상자에 실행 취소 또는 다시 실행 기능을 적용하지 않으면 실행 취소 할 편집기를 하나만 설정할 수 있습니다. 나는 jQuery와 JavaScript 모두에서 약간의 변형을 시도했지만 아무 소용이 없다. 이것은 내가 일하려고하는 코드 블록 중 하나입니다. codemirror 설정을 저장하는 실제 변수는 "codeeditor1", "# editor1"은 텍스트 상자의 ID입니다.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); 
} 

나는 논리적 코드 배치를 위해 이것을 시도했지만 아직까지는 아무런 운이 없다. 아마도 이것은 코드미어 방법의 버그일까요?

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

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

답변

0

좋아! 그래서, 나는 그것을 알아 냈다.

문제는 (나는 제대로 생각하지 못했습니다.) 사용자가 버튼을 누르면 물론 포커스가 제거 된 다음 "hasFocus"의 결과가 false라는 것을 의미하는 테스트를 시도한다는 것입니다. 그래서이 문제를 해결하기 위해 변수를 만들었습니다. 변수 중 하나가 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

관련 문제