我的页面上列出了一些字段,每个字段都有一个按钮,用于创建要转换为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对象的?
答案 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回调处理程序传递到计时器回调处理程序。同样,它并不漂亮,但我使用了一个全局变量(变量的范围是整个页面)。
祝你好运!