Comment détecter les changements de TinyMCE?

J'ai ajouté TinyMCE(version 4.0.2) éditeur Dans un format HTML existant dans mon projet (PHP,Codeigniter). Mon objectif final est d'activer le bouton soumettre le formulaire si des changements se produisent dans le formulaire, y compris L'éditeur TinyMCE. Je ne peux le faire qu'avec le formulaire sauf L'éditeur TinyMCE. Je n'ai pas pu détecter de changements de TinyMCE.

je veux détecter si un changement se produire lorsque la clé. J'ai vu que tinymce a une fonction onchange comme bellow.

            setup : function(ed) {
            ed.onChange.add(function(ed, l) {
                console.debug('Editor contents was modified. Contents: ' + l.content);
            });

j'ai mis le code supérieur à l'intérieur du soufflet fonction init, mais pas de sortie que j'ai trouvé.

tinymce.init({ });

Pouvez-vous dire comment détecter le changement, ou tout meilleure idée?

28
demandé sur danronmoon 2013-07-23 10:07:31

10 réponses

je suis en retard à la fête, mais pour référence future voici comment vous le faites dans TinyMCE 4.X:

tinyMCE.init({
   setup:function(ed) {
       ed.on('change', function(e) {
           console.log('the event object ', e);
           console.log('the editor object ', ed);
           console.log('the content ', ed.getContent());
       });
   }
});
53
répondu sica07 2016-07-08 14:49:16

Pour les Tinymce 4 il fonctionne pour moi,

        editor.on('keyup', function(e) {
            alert('keyup occured');
            //console.log('init event', e);
            console.log('Editor contents was modified. Contents: ' + editor.getContent());
            check_submit(); //another function calling
        });

EDIT:

notez que keyup ne capturer tous les cas. par exemple,copy/paste/cutmenu et pas keyboard

si vous le souhaitez, vous pouvez saisir ces

editor.on('paste', function(e) {
                    console.debug('paste event');

                });

editor.on('cut', function(e) {
                    console.debug('cut event');

                });

NOTE si vous capturez cut et paste à partir tinymce vous ne devriez probablement pas traiter ces événement keyup. Ce que j'ai fait, c'est de ne Sauvegarder que si les clés ne sont pas les touches cut& paste j'.e :

 /**
 * MCE keyup callback, update the master model selected attribute
 * 
 * @method tinyMCEKeyup
 */
 tinyMCEKeyUp : function(e) {
        console.log('tinymce:keyup');


         var ctrlDown = false;
         var ctrlKey = 17, vKey = 86, xKey = 88;


         if ((e.ctrlKey) && (e.keyCode === vKey)) {
             console.log('paste from keyboard')
             /* got here. do nothing. let paste event handle this one  */
             return;
         } else if ((e.ctrlKey) && (e.keyCode === xKey)) {
             console.log('cut from keyboard')
             /* got here. do nothing. let paste event handle this one  */
             return;
         }

         this.doSave();

},

et d'appeler cette fonction à partir de l'événement keyup. De cette façon, vous vous sauverez faire quelques actions deux fois sur cut & paste

NOTE vous allez bientôt comprendre que tout style changes qui arrive à partir d' menu déclenchement de ces événements..

je suis toujours à la recherche d'une réponse pour capturer le changement de style.

25
répondu user2603482 2018-04-18 06:55:25

Qui fonctionne pour moi:

tinyMCE.init({
    setup : function(ed){
         ed.on('NodeChange', function(e){
             console.log('the event object ' + e);
             console.log('the editor object ' + ed);
             console.log('the content ' + ed.getContent());
         });
    }
});

ed.on('SaveContent', function(e) {  

ou

ed.on('submit', function(e) {

Trouvé sur la page http://www.tinymce.com/wiki.php/api4:class.tinymce.Editor dans la Section Événement

11
répondu Martin 2014-01-27 20:24:26

ce qui suit va capturer "keyup" et d'autres événements de changement (copier, coller, center, etc.):

tinymce.init({
    setup: function (ed) {
        ed.on('keyup', function (e) {
            tinyMceChange(ed);
        });
        ed.on('change', function(e) {
            tinyMceChange(ed);
        });
    }
});

function tinyMceChange(ed) {
    console.debug('Editor contents was modified. Contents: ' + ed.getContent());
}
8
répondu oalbrecht 2016-04-20 13:08:01

Je l'utilise dans tinymce 4.x

tinymce.init({
    selector: "#tinymce-textarea",
    setup : function(ed) {
        ed.on("change", function(e){
            $('#tinymce-livepreview').html(tinymce.activeEditor.getContent());
        });
        ed.on("keyup", function(){
            $('#tinymce-livepreview').html(tinymce.activeEditor.getContent());
        });
   }
});

Explication:

on ("change") est pour détecter les changements sur l'événement de la souris si u cliquez sur l'icône de la barre d'outils ou la sélection dans le menu. Il peut également détecter l'Événement du clavier, mais seulement après avoir perdu la mise au point (pas en temps réel).

("keyup") pour détecter les changements en temps réel d'événements de clavier

6
répondu Syukri Hakim Abdul Rahman 2015-08-28 02:37:47

essaye ceci:

tinyMCE.init({
   setup : function(ed) {
          ed.onChange.add(function(ed, l) {
                  var editorContent = l.content;    // editorContent will hold the values of the editor
                  alert(editorContent);
          });
   }
});

Cliquez pour le Rreference here

3
répondu Nil'z 2013-07-23 06:28:29

nous avons constaté que l'événement de changement ne se déclenche parfois qu'après avoir appuyé sur Entrée; il semble être lié au annuler le traitement. De plus, l'événement keyup se déclenche lorsque le contenu n'a pas changé, comme lorsque maj ou CMD-A sont pressés.

donc nous utilisons les deux modifier et keyup, et comparez la dernière valeur traitée à la valeur courante pour détecter un changement réel.

Cette solution fonctionne aussi pour couper et coller, et les modifications à partir d'éléments de menu.

//Sometimes does not fire unless enter is pressed
editor.on('change', () => {
    var value = editor.getContent();
    if (value !== editor._lastChange) {
        editor._lastChange = value;
        window.console.log(editor._lastChange);
    }
});

//Sometimes fires even if content did not change
editor.on('keyup', () => {
    var value = editor.getContent();
    if (value !== editor._lastChange) {
        editor._lastChange = value;
        window.console.log(editor._lastChange);
    }
});
1
répondu Steven Spungin 2017-08-13 11:08:30

Ce beau travail pour moi dans tous les condtion clé , couper, copier , coller

    setup: function (editor) {
        editor.on('KeyUp', function(e){
            alert(editor.getContent());
         });
}
1
répondu sandeep kumar 2018-03-14 08:45:13
tinymce.init({
    // ...
    setup: function(editor) {
        editor.on('Paste Change input Undo Redo', function () {
            if (editorChangeHandler) {clearTimeout(editorChangeHandler);}
            editorChangeHandler = setTimeout(function() {
                console.log('changed');
            }, 100);
        });
    }
    // ,...
});
1
répondu Nagy Zoltán 2018-03-28 09:05:18

Salut, j'ai essayé d'utiliser ceci:

setup : function(ed) {
    ed.onChange.add(function() {
        $('#changed').val(1);
    });
}

ceci est pour mettre à jour un champ caché "modifié" avec la valeur de 1 de sorte que lorsqu'un utilisateur essaye de fermer la page ou de quitter celle-ci, il est informé qu'il a des données non sauvegardées.

ma faute est que cela ne fonctionne que si 2 ou plusieurs modifications sont apportées - par exemple, si j'ai remarqué que je n'avais pas fini avec un arrêt complet "."je suis retourné pour ajouter ceci puis pour une raison quelconque cliqué près je serais en mesure de quitter la page sans être averti de la les modifications

-1
répondu Gravesy 2013-12-06 22:31:46