tinyMCE setContent - 动态(jQuery)添加了textarea

时间:2012-02-01 10:15:16

标签: jquery dynamic null tinymce

我的页面上列出了一些字段,每个字段都有一个按钮,用于创建要转换为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为null。不知何故tinyMCE在DOM中找不到编辑器?那之前它是如何转换为tinymce对象的?

4 个答案:

答案 0 :(得分:3)

尝试做:


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

希望有所帮助

答案 1 :(得分:2)

最简单的方法是

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

答案 2 :(得分:2)

我遇到了同样的问题。

tinymce.init移至页面末尾。

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

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

答案 3 :(得分:1)

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

我正在使用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回调处理程序传递到计时器回调处理程序。同样,它并不漂亮,但我使用了一个全局变量(变量的范围是整个页面)。

祝你好运!