Wenn ich den Code in einer TextArea mit CodeMirror bearbeite, wie kann ich dies mit js oder jQuery in eine andere Textarea reflektieren

Lesezeit: 6 Minuten

Die App: Ich habe ein Textarea-Element in meiner Seite. Es wird mit CodeMirror transformiert, da ich darin HTML-Code einrücken und hervorheben muss. Bild ist im Link:
[textarea using codemirror]

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

Hier ist der Code für Textarea mit 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>

Wie es geht?: Wenn ich auf die Schaltfläche Post klicke, sollte der gesamte Code in ein anderes Textfeld übertragen werden. Ich brauche dies, um mit Javascript oder jQuery zu tun, habe aber Schwierigkeiten, wie es geht. Irgendeine Hilfe?

Für die Real-World-App Der Code in diesem Textbereich (von Bild oben) sollte sich auf die Html Designer API auswirken. dh alle Änderungen im HTML-Designer sollten in diesem Textbereich (der Codemirror für die Lesbarkeit verwendet) widergespiegelt werden und umgekehrt. Wenn ich im Textbereich bearbeite, sollten sich Änderungen im HtmlDesigner widerspiegeln, aber in diesem Simulationsfall -> im zweiten Textbereich.

Beispiel: wie Visual Studio .Net WebPage Code Editor mit Designer + Source-Modus. Jetzt ist es klar?

ich frage wie man den oben beschriebenen Mechanismus mit Javascript oder jquery implementiert. Vielen Dank!

Benutzer-Avatar
Marijn

Übergeben Sie eine onChange-Option an CodeMirror, die etwa so aussieht:

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

Bearbeitet, um zu beachten: Seit CodeMirror Version 2.0 übergeben Sie keine onChange Möglichkeit nicht mehr, einen Änderungshandler zu registrieren, sondern aufrufen instance.on("change", function(cm, change) { ... }) stattdessen. http://codemirror.net/doc/manual.html#event_change

  • Wow! Ich bin so froh, es vom Autor zu hören 🙂 Aber immer noch ein Missverständnis: 1. Muss ich diese neue Funktion (cm) noch schreiben? 2. mySecondTextArea kann ein einfacher Textbereich sein oder ein anderer, der cm verwendet, um zu arbeiten.

    – A. Mano

    25. Juli 2011 um 10:58 Uhr


  • Das Szenario: Ich füge Code in ein einfaches Textfeld ein. Wenn ich auf die Schaltfläche Post drücke, sollte dieser Code in den Textbereich gehen, der Code Mirror verwendet, damit er gut bearbeitet werden kann. Nach der Bearbeitung sollte der Code erneut beim Drücken einer anderen Schaltfläche Änderungen speichern geändert im ersten Textbereich erscheinen (wie in einem IDE-Playground:)).

    – A. Mano

    25. Juli 2011 um 11:07 Uhr

  • Sorry für die Anfängerfrage. Aber was sind die Funktionen und der Code für diesen Mechanismus in js? Ich surfe im Internet und Bücher für js, aber dieses Mal brauche ich es schneller. 🙂 Danke.

    – A. Mano

    25. Juli 2011 um 11:13 Uhr


  • codemirror.net/manual.html – onChange (Funktion) Wenn angegeben, wird diese Funktion jedes Mal aufgerufen, wenn der Inhalt des Editors geändert wird. Als einziges Argument wird ihm die Editorinstanz übergeben.

    – Brian Beckett

    25. Juli 2011 um 12:30 Uhr

  • Hat sich die API seit diesem Kommentar geändert? Verwenden { onChange : function(cm) { alert("foo"); } } scheint bei mir nicht zu funktionieren

    – AlanFoster

    11. Januar 2013 um 19:31 Uhr

Die derzeit letzte veröffentlichte Version (v 3.15) funktioniert mit dieser Lösung:

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

Dies funktioniert mit CodeMirror 5.22.0:

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

Die Handhabung von onChange im Code-Mirror ist nicht so:

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

du musst verwenden:

$.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");
}

Benutzer-Avatar
Brian Beckett

Sie möchten also Text aus einer TextArea kopieren (die als input Kontrolle übrigens) zu einem anderen?

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

  • Code erscheint nur dann im zweiten Textbereich vom ersten, wenn ich Code in Visual Studio in den Textbereich einfüge. Aber in einer realen Welt fügt der Benutzer der Site einen Code in den ersten Textbereich ein, der im zweiten Textbereich erscheinen sollte, um ihn dann zu bearbeiten, wenn er auf die Schaltfläche „Posten“ klickt. Es sollte zum ersten gehen. Wie kann man also erkennen, welcher Benutzer eingefügt wurde, und wie kann man mit JS die Kontrolle darüber übernehmen? 🙂 Danke.

    – A. Mano

    25. Juli 2011 um 8:58 Uhr

  • Huh, das ist interessant … klicken Sie auf die Schaltfläche, während das Textfeld noch ausgewählt ist? Versuchen Sie in diesem Fall, außerhalb des Textbereichs zu klicken (damit er unscharf wird), bevor Sie auf die Schaltfläche klicken. Wenn es immer noch nicht richtig funktioniert, würde ich davon ausgehen, dass es sich um eine CodeMirror-Funktion handelt, die den alten Wert anstelle des neuen zurückgibt – es könnte eine gute Idee sein, getValue() zu versuchen, wie von Marijn vorgeschlagen.

    – Brian Beckett

    25. Juli 2011 um 9:38 Uhr

  • Ah ja, benutze getValue() – codemirror.net/manual.html – .value ist der Startwert des Editors. Ich werde meine Antwort bearbeiten, um dies widerzuspiegeln.

    – Brian Beckett

    25. Juli 2011 um 9:40 Uhr

  • Schätze es sehr! Ich lerne unterwegs mit euch Geeks.

    – A. Mano

    25. Juli 2011 um 11:18 Uhr

  • So funktioniert es 🙂 Denken Sie daran, eine Antwort zu akzeptieren, sobald Sie die richtige eingegeben haben 😉 Viel Glück mit Ihrem Code!

    – Brian Beckett

    25. Juli 2011 um 12:31 Uhr

Benutzer-Avatar
angelcool.net

Sie können dies verwenden …

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

Und erhalten Sie Daten mit
editor_js.getValue()

  • Code erscheint nur dann im zweiten Textbereich vom ersten, wenn ich Code in Visual Studio in den Textbereich einfüge. Aber in einer realen Welt fügt der Benutzer der Site einen Code in den ersten Textbereich ein, der im zweiten Textbereich erscheinen sollte, um ihn dann zu bearbeiten, wenn er auf die Schaltfläche „Posten“ klickt. Es sollte zum ersten gehen. Wie kann man also erkennen, welcher Benutzer eingefügt wurde, und wie kann man mit JS die Kontrolle darüber übernehmen? 🙂 Danke.

    – A. Mano

    25. Juli 2011 um 8:58 Uhr

  • Huh, das ist interessant … klicken Sie auf die Schaltfläche, während das Textfeld noch ausgewählt ist? Versuchen Sie in diesem Fall, außerhalb des Textbereichs zu klicken (damit er unscharf wird), bevor Sie auf die Schaltfläche klicken. Wenn es immer noch nicht richtig funktioniert, würde ich davon ausgehen, dass es sich um eine CodeMirror-Funktion handelt, die den alten Wert anstelle des neuen zurückgibt – es könnte eine gute Idee sein, getValue() zu versuchen, wie von Marijn vorgeschlagen.

    – Brian Beckett

    25. Juli 2011 um 9:38 Uhr

  • Ah ja, benutze getValue() – codemirror.net/manual.html – .value ist der Startwert des Editors. Ich werde meine Antwort bearbeiten, um dies widerzuspiegeln.

    – Brian Beckett

    25. Juli 2011 um 9:40 Uhr

  • Schätze es sehr! Ich lerne unterwegs mit euch Geeks.

    – A. Mano

    25. Juli 2011 um 11:18 Uhr

  • So funktioniert es 🙂 Denken Sie daran, eine Antwort zu akzeptieren, sobald Sie die richtige eingegeben haben 😉 Viel Glück mit Ihrem Code!

    – Brian Beckett

    25. Juli 2011 um 12:31 Uhr

1158310cookie-checkWenn ich den Code in einer TextArea mit CodeMirror bearbeite, wie kann ich dies mit js oder jQuery in eine andere Textarea reflektieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy