【问题标题】:tinyMCE setContent - dynamically (jQuery) added textareatinyMCE setContent - 动态(jQuery)添加 textarea
【发布时间】:2012-02-01 10:15:16
【问题描述】:

我的页面上列出了一些字段,每个字段都有一个按钮,用于创建要转换为 tinyMCE 的 textarea,并且内容应使用来自 ajax 请求的字符串进行更新。像这样:

$("table td.bio-td").delegate(".btn", "click", function() {
     ...         
     var id = this.id;
     $('#cont').html('<textarea id="mceeditor_'+id'">xyz</textarea>');
     tinymce.EditorManager.execCommand('mceAddControl',true, 'mceeditor_'+id);
     tinymce.activeEditor.setContent(ajax_str);
     ...
});

代码正常工作,除了一件事:setContent() 行。 我在 javascript 控制台中收到一个错误,即 activeEditor 为空。不知怎的,tinyMCE 在 DOM 中找不到编辑器?那么它之前是如何转换成tinymce对象的呢?

【问题讨论】:

    标签: jquery dynamic null tinymce


    【解决方案1】:

    尝试做:

    tinymce.get('your_textarea_id').focus(); tinymce.activeEditor.setContent(ajax_str);

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      最简单的方法是

      tinymce.get('mceeditor_'+id).setContent(ajax_str);
      

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题。

        tinymce.init 移动到页面末尾。

        使用 $('#terms').val('ssssss') 在 ajax 成功时更新 textarea

        textarea 更新后,它将被转换为编辑器。

        【讨论】:

          【解决方案4】:

          我偶然发现了同样的问题。

          我正在使用 Jquery UI 选项卡(jquery ui 库),并且在我动态创建的每个选项卡中,我正在尝试为每个选项卡中的 textarea 初始化一个 tinyMCE 实例。每次单击按钮时,都会向服务器发出 ajax 请求以获取信息,并且 javascript 处理程序会创建一个包含信息的新选项卡。

          似乎正在发生的问题是,当服务器在回调处理程序中返回响应时,如果您在同一个线程中执行以下调用,则在回调上

          tinyMCE.execCommand("mceAddControl",false, "my_element" + elementid);
          tinyMCE.get("my_element" + elementid).setContent("hello world!");
          

          “tinyMCE.get(..)”将返回 null。

          您添加的新 mce 控件似乎只有在回调处理函数完全执行完成后才创建完成。

          因此,你需要这样称呼:

          tinyMCE.get("my_element" + elementid).setContent("hello world!");
          

          其他地方,稍后(通过之后触发的事件)。

          更新(编辑):

          所以我在没有真正测试的情况下告诉了你这一切。 但最后我知道了,我确认这就是正在发生的事情。 我做了一个不那么漂亮的破解,我使用计时器在 100 毫秒后触发,例如:

          tinyMCEHack_timer = setTimeout("finish_setting_mce_content()",100);
          

          理想情况下,您会希望找到比这更好的活动。

          您还必须找到将数据从 ajax 回调处理程序传递到计时器回调处理程序的方法。同样,它并不漂亮,但我使用了一个全局变量(变量的范围是整个页面)。

          祝你好运!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-14
            • 1970-01-01
            相关资源
            最近更新 更多