tinymce 不会在函数中初始化,在浏览器控制台中工作

tinymce wont init in function, works in browser console

我有一个将 HTML 附加到 div 的函数,然后尝试在 <textarea> 字段上初始化 tinyMCE:

function refreshNotes() {
            {#console.log("fetching notes")#}
            $.get({
                url: "/notes/{{ record_id }}",
                dataType: "json"
            }, (response) => {
                $("#noteCollapseNotes").empty()
                const notes = Object.entries(response["data"])
                {#console.log(notes)#}
                
                for (const [key, note] of notes) {
                    {#console.log(key, note)#}
                    $("#noteCollapseNotes").append(getNoteHTML(key, note))
                    
            })
            tinymce.init({
                selector: ".readonly",
                readonly: true,
                menubar: false,
                toolbar: false,
                height: 100
            });
        }

refreshNotes 每当用户对笔记执行 CRUD 操作时调用。 getNoteHTML() 生成一个 <div>,里面有一个 <textarea>,其中包含 .readonly class

refreshNotes() 末尾的 tinymce.init 调用由于某种原因无效。

但是,如果我进入控制台并粘贴相同的调用,编辑器会成功初始化。 这里有什么问题?

您的 JavaScript 很可能有时间问题。您有一个看起来是异步的 $.get() 调用,然后您立即尝试初始化 TinyMCE。直到异步调用 returns 之后,您才创建 DOM 节点,但是您在开始调用以从服务器获取数据后立即初始化 TinyMCE。当您尝试从控制台调用时,$.get() 可能已经完成,并且一切如您所愿。

在创建新 DOM 节点的 for 查找完成后,我会将 tinymce.init({}) 调用移动到您的成功函数中。