TinyMCE 撤销操作未触发更改事件。

4

不确定是否有人曾经遇到过TinyMCE的这个问题。 我有一个on change事件处理程序,它会改变另一个元素的值。 请参见下面的init代码:

/** Initialize TinyMCE inline editor for headline text */
tinymce.init({
    selector: ".editable.headline",
    paste_as_text: true,
    inline: true,
    toolbar: "undo redo",
    menubar: false,
    verify_html: false,
    font_formats: "MuseoSans = sans-serif;",
    setup: function(ed) {
        var text = '';
        var wordlimit = 200;
        /** handler for keydown event to prevent < 200 character limit */
        ed.on('keydown',function(e) {
            text = ed.getContent().replace(/(< ([^>]+)<)/g, '');
            wordcount = wordlimit - (text.length);
               if(wordcount <= 0 && e.keyCode != 8) {
                    e.preventDefault();
                    e.stopPropagation();
                    return false;
               }
        });
        /** handler for headline text changes */
        ed.on('change',function(e) {
            var content = tinyMCE.get(ed.id).getContent();
            var escapedClassName = ed.id.replace(/(\[|\])/g, '\\$&');
            $('.'+escapedClassName).html(content);

        });
   }
});

当我输入/粘贴文本时,change事件会正确触发,但是当我撤消文本更改时,change事件不会正确触发。
有什么想法可以强制在撤消和重做事件中触发change事件吗?
非常感谢您的帮助!
2个回答

7

虽然内容不是很容易找到,但TinyMCE网站确实描述了编辑器生命周期中触发的事件列表,并解释了这些事件何时触发。

在您的情况下,只需将重做撤销事件添加到setup函数中的on函数调用即可。

setup: function (ed) {
    ed.on('change redo undo',function(e) {
        var content = tinyMCE.get(ed.id).getContent();
        var escapedClassName = ed.id.replace(/(\[|\])/g, '\\$&');
        $('.'+escapedClassName).html(content);
    });
}

5

顺便提一下,我在更改链接的URL时遇到了相同的问题(它没有触发任何事件),我通过手动触发事件来解决:

 tinymce.activeEditor.fire('change');

你能请解释一下你是如何实现这个的吗? - isherwood
抱歉,那是很久以前的事了,我忘记了所有的细节,而且我也无法再访问那个代码库了。 - Dario

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接