TinyMCE撤消操作不会触发更改事件

时间:2014-09-08 20:19:58

标签: javascript html tinymce

不确定是否有人曾经使用过您的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 个答案:

答案 0 :(得分:6)

内容不容易找到,但TinyMCE网站确实描述了events that are fired during the course of the editor's lifecycle的列表,并解释了这些事件何时被触发。

在您的方案中,只需将重做撤消事件添加到on函数中的setup函数调用中。

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);
    });
}

答案 1 :(得分:0)

仅供参考,我在更改链接的URL时遇到了同样的问题(它没有触发任何事件),我通过手动触发事件解决了这个问题:

 tinymce.activeEditor.fire('change');