2017-05-24 5 views
0

Ich habe einige otherquestions in Bezug auf wie Inline-Inhalt zu speichern. Daraus habe ich gelesen, dass alle der folgenden sollte Fokus/Unschärfe Änderungen erkennen arbeiten:ckeditor globale Ereignisse nicht feuern auf Inline-Editoren

CKEDITOR.on("blur", function(e) { 
    console.log("The editor named " + e.editor.name + " BLUR") 
}) 
CKEDITOR.on("focus", function(e) { 
    console.log("The editor named " + e.editor.name + " FOCUS") 
}) 
CKEDITOR.on("instanceReady", function(evt) { 
    var editor = evt.editor 
    console.log("The editor named " + editor.name + " is now ready") 

    editor.on("focus", function(e) { 
     console.log("The editor named " + e.editor.name + " is now focused") 
    }) 
    editor.on("blur", function(e) { 
     console.log("The editor named " + e.editor.name + " is now focused") 
    }) 
}) 

ich diese Funktionen nenne, bevor die DIV-Elemente auf der Seite hinzufügen. (Obwohl für ein gutes Maß, versuchte ich auch diese nach Ich habe die DIV-Elemente auf der Seite, ohne Änderung des Verhaltens.) Ich habe die DIV-Elemente alle auf contenteditable=true gesetzt. Wenn ich auf einen von ihnen klicke, bekomme ich einen blinkenden Cursor an dem Punkt, auf den ich geklickt habe, und ich kann den Inhalt des DIVs bearbeiten. Wenn ich irgendwo anders klicke, verschwindet der Cursor und zeigt an, dass der Fokus verloren gegangen ist.

Allerdings wird keine meiner oben genannten Funktionen aufgerufen. Wie soll ich erkennen, wenn einer der Inline-Redakteure den Fokus verliert und verliert?

Ich habe am API sah und ich eigentlich nicht sehen on ein Verfahren des globalen CKEDITOR Singleton ist, so bin ich nicht sicher, wie dies auch funktionieren soll. Die Methode ist aber definitiv da.

Update: Ich habe versucht, einen anderen ckeditor (https://cdnjs.cloudflare.com/ajax/libs/ckeditor/4.5.7/ckeditor.js statt die Version, die ich für meine Website gebaut und heruntergeladen) mit und dass Versionaber nur für das instanceReady Ereignis funktioniert. Ich verwende die gleiche Version Nummer wie auf meiner Website, aber ich bin sicher, ich habe nicht mit allen die gleichen Plug-Ins gebaut, daher ich Verdacht gibt es ein Problem mit einem Plug-in.

Ich habe auch bemerkt, dass, obwohl ich contenteditable=true auf meinem div habe, wenn ich es auswähle und es aktiv wird, ändert das Element tatsächlich nichts, das heißt, CKEDITOR scheint es nicht durch irgendetwas zu ersetzen die Bearbeitung. Dies würde erklären, warum die Unschärfe- und Fokusereignisse nicht ausgelöst werden, aber warum übernimmt CKEDITOR nicht die Kontrolle?

Antwort

0

Elemente, die nach dem Laden von CKEditor erstellt werden, werden nicht automatisch verwendet. Die inlineAll Funktion muss aufgerufen werden. Die Dokumentation beschreibt diese Funktion, indem sie sagt: "Verwandelt ein DOM-Element mit dem Conteneditable-Attribut, das auf True gesetzt wird, in eine CKEditor-Instanz." Das war verwirrend für mich, weil ich dachte, dass ich das Element nicht zu einer echten CKEditor-Instanz machen wollte, bis es angeklickt wurde. Dies bedeutet jedoch nicht, dass eine Editiersitzung gestartet wird, sondern dass sie so eingerichtet wird, dass sie von CKEditor bearbeitet werden kann.

Wenn andere CKEditors vorhanden sind, müssen sie zuerst entfernt werden oder inlineAll wird fehlschlagen. So wird der folgende Code alle vorhandenen loswerden und dann alle neu erstellen:

for (i in CKEDITOR.instances) { 
    CKEDITOR.instances[i].destroy() 
} 
CKEDITOR.inlineAll() 
Verwandte Themen