【问题标题】:TinyMCE -> Cannot read property 'setAttribute' of nullTinyMCE -> 无法读取 null 的属性“setAttribute”
【发布时间】:2015-05-23 06:14:46
【问题描述】:

所以我正在制作一个需要 HTML 输入框的 MVC 站点。 我有一个从 ajax 对话窗口加载的文本区域。我知道 TinyMCE 需要我在隐藏对话框时删除控件,这很好。

但是我根本无法加载编辑器。我正在使用带有 jquery 模块的版本 4.1.9 (2015-03-10)。 即 tinymce.jquery.js & jquery.tinymce.min.js

一旦对话窗口打开,我就调用它;

$("textarea").tinymce({
    // General options
    mode: "textareas",
    theme: "modern",
    // Theme options
    menubar: false,
    toolbar: "bold,italic,underline,|,bullist,numlist",
    statusbar: false,
    init_instance_callback: function (editor) {
        console.log("tinymce init: " + editor.id);
    }
});

但我在以下方法中的 javascript 中遇到异常,似乎 self.ariaTarget 未定义导致行开始 elm.setAttribute 失败,因为 elm 为空。
我不明白我做错了什么。

/**
* Sets the specified aria property.
 *
 * @method aria
 * @param {String} name Name of the aria property to set.
 * @param {String} value Value of the aria property.
 * @return {tinymce.ui.Control} Current control instance.
 */
aria: function(name, value) {
    var self = this, elm = self.getEl(self.ariaTarget);
        if (typeof value === "undefined") {
        return self._aria[name];
    } else {
        self._aria[name] = value;
    }
        if (self._rendered) {
        elm.setAttribute(name == 'role' ? name : 'aria-' + name, value);
    }
        return self;
},

感谢您的帮助。
标记

编辑:
我一直在关注这个 jsfiddle http://jsfiddle.net/thomi_ch/m0aLmh3n/19/,而不是在文档中加载 tinymce,而是在初始化时从 url 加载它(见下文)。我已经更改了我的代码以使用与示例相同的 script_url 并且它可以渲染编辑器(缺少图标等,因为找不到 css)但这对我来说意味着我的 tinymce.jquery 的版本有问题.js 文件。

$('textarea').tinymce({
    script_url : 'http://demo.nilooma.com/system/plugins/tinymce/4.1.6/tiny_mce/tinymce.gzip.php',
    toolbar: 'link',
    plugins: 'link',
    forced_root_block : '',
    init_instance_callback: function(editor) {
        console.log('tinymce init: '+editor.id);
    }
});

我已经尝试了 4.1.9 和 4.1.6 版本的 tinymce.jquery.js 和 tinymce.js,因为 jsfiddle 使用了所有的组合都给了我同样的错误。
是否可能与其他库不兼容?

【问题讨论】:

    标签: javascript jquery tinymce


    【解决方案1】:

    我找到了该问题的解决方案。我相信这是由于尝试多次初始化元素造成的,之后我还发现了一个缺陷,即元素在隐藏时没有显示编辑器。

    我用来初始化引导模式的代码是这样的;

    $("#myModal").modal({
        keyboard: true
    }, "show");
    
    //Bind open
    $("#myModal").on("show.bs.modal", function () {
        $(document).trigger("DialogLoaded");
    });
    //Bind close
    $("#myModal").on("hidden.bs.modal", function () {
        $(document).trigger("DialogClosed");
    });
    

    然后我监听文档上的事件;

    tinyMCE.init({
        // General options
        mode: "textareas",
        theme: "modern",
        // Theme options
        menubar: false,
        toolbar: "bold,italic,underline,|,bullist,numlist",
        statusbar: false,
        init_instance_callback: function(editor) {
            console.log("tinymce init: " + editor.id);
        }
    });
    
    $(document).on("DialogLoaded", function () {
        var textAreas = $("textarea", $("#myModal"));
        for (var i = 0; i < textAreas.length; i++) {
            //Check if element already has editor enabled
            if (tinymce.get(textAreas[i].id)) {
                //Remove existing editor
                tinyMCE.execCommand("mceRemoveEditor", false, textAreas[i].id);
            }
    
            //Add editor
            tinyMCE.execCommand("mceAddEditor", false, textAreas[i].id);
        }
    });
    
    $(document).on("DialogClosed", function () {
        //Remove all editors in dialog
        var textAreas = $("textarea", $("#myModal"));
        for (var i = 0; i < textAreas.length; i++) {
            //Check if element already has editor enabled
            if (tinymce.get(textAreas[i].id))
                tinyMCE.execCommand("mceRemoveEditor", false, textAreas[i].id);
        }
    });
    

    我想有几点要记住;

    • 仅在可见元素上加载 tinyMCE
    • 首先初始化 tinyMCE
    • 确保每个元素只加载一次
    • 确保每个 textarea 都有一个唯一的 ID(隐藏后将其删除)

    我希望这可以帮助其他在 TinyMCE 上遇到任何问题的人。

    谢谢,
    标记。

    【讨论】:

    • 我正面临这个问题,我已经尝试过了。它没有解决。我已经检查了网页。我没有使用任何对话框。我可以知道如何解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    相关资源
    最近更新 更多