Подтвердить что ты не робот

Когда я редактирую код в TextArea с помощью CodeMirror, как отразить это в другом текстовом поле с js или jQuery

Приложение: У меня есть элемент textarea на моей странице. Он преобразуется с помощью CodeMirror, потому что мне нужно отступы и выделить html-код с его помощью. Pic находится по ссылке: [textarea using codemirror]

http://uploadingit.com/file/gxftd2cps9wm7zhp/cm.png

Вот код для textarea, использующий codemirror:                        

</textarea>
    <button type="submit">Post</button>       
</form>
 <script>

   var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
     mode: { name: "xml", htmlMode: true },
     lineNumbers: true,
     tabMode: "indent",
     matchBrackets: true,
     path: 'js/', 
     searchMode: 'inline',
     onCursorActivity: function () {
       editor.setLineClass(hlLine, null);
       hlLine = editor.setLineClass(editor.getCursor().line, "activeline");
     }
   });

   var hlLine = editor.setLineClass(0, "activeline");
  </script>

Как это сделать?. Когда я нажимаю кнопку "Отправить", весь код должен быть передан в другое текстовое пространство. Мне нужно это сделать с javascript или jQuery, но изо всех сил пытаюсь это сделать. Любая помощь?

Для приложения реального мира код в этом текстовом поле (из рис. выше) должен влиять на API-интерфейс Html Designer. Все изменения в дизайнере Html должны быть отражены в этом текстовом поле (которое использовало codemirror для удобочитаемости) и наоборот. Когда я редактирую в текстовом поле изменения должны быть отражены в HtmlDesigner, но в этом случае симуляции → во втором текстовом поле.

Пример:, например Visual Studio.Net WebPage Code Editor, который имеет режим Designer + Source. Теперь ясно?

Я спрашиваю, как реализовать описанный выше механизм с помощью javascript или jquery. Большое вам спасибо!

4b9b3361

Ответ 1

Передайте параметр onChange для CodeMirror, который выглядит примерно так:

onChange: function (cm) {
   mySecondTextArea.value = cm.getValue();
}

Отредактировано для заметок: Начиная с версии 2.0 CodeMirror, вы больше не передаете опцию onChange для регистрации обработчика изменений, а вместо этого вызываете instance.on("change", function(cm, change) { ... }). http://codemirror.net/doc/manual.html#event_change

Ответ 2

Последняя выпущенная версия в данный момент (v 3.15) работает с этим решением:

// on and off handler like in jQuery
CodemirrorInstance.on('change',function(cMirror){
  // get value right from instance
  yourTextarea.value = cMirror.getValue();
});

Ответ 3

onChange обработки в зеркале кода не так:

onChange: function(cm) { mySecondTextArea.value = cm.getValue(); }

вы должны использовать:

$.fn.buildCodeMirror = function(){
    var cmOption {...};
    var cm = CodeMirror($("MyDomObjectSelector")[0],cmOption);
    cm.on("change",$.fn.cmChange);
}

$.fn.cmChange = function(cm,cmChangeObject){
    alert("code mirror content has changed");
}

Ответ 4

Итак, вы хотите скопировать текст из одного TextArea (который, кстати, как элемент управления input), другому?

//Set the button to call a Javascript function when it is clicked
<button type="submit" onclick="copyText();">Post</button>

<script type="text/javascript">
    function copyText() {
        //Get the text in the first input
        var text = document.getElementById("firstTextArea").getValue(); 
        //Can't use .value here as it returns the starting value of the editor

        //Set the text in the second input to what we copied from the first
        document.getElementById("secondTextArea").value = text;
    }
</script>

Ответ 5

Эта работа работает CodeMirror 5.22.0:

CodeMirror.fromTextArea(document.getElementById('grammar'), {
    lineNumbers: true,
    mode: 'pegjs',
}).on('change', editor => {
    console.log(editor.getValue());
});

Ответ 6

Вы можете использовать это...

var editor_js = CodeMirror.fromTextArea(document.getElementById("js"), {
   mode: 'text/javascript',
   theme: 'icecoder',
   styleActiveLine: true,
   lineNumbers: true,
   lineWrapping: true,
});

И получить данные с editor_js.getValue()