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]
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!
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();
});
$.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");
}
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!
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
11583100cookie-checkWenn ich den Code in einer TextArea mit CodeMirror bearbeite, wie kann ich dies mit js oder jQuery in eine andere Textarea reflektierenyes