【问题标题】:Display tinymce textarea dynamically动态显示tinymce textarea
【发布时间】:2015-05-27 17:48:18
【问题描述】:

我有一个下拉列表,当进行选择时,将使用 ajax 在表单中插入一堆元素到 DOM,在这个表单中,我有我希望成为 TinyMCE 文本区域的文本区域。

我的 HTML 头部中有这个:

<script type="text/javascript">
    tinymce.init({
        selector: "textarea"

     });
</script>

这是我用来添加一堆元素的 ajax 函数,这是我需要的。

function getSecFacility(facsecid, facid) {

    $("#new_section_form").hide();

    $.ajax({
    type: "POST",
    url:  "facility_section_information.php",
    data: 'facility_section_id='+facsecid+'&facility_id='+facid,

    success: function(data){
            $("#selected_fac_section").html(data);
    }
   });
   //loadTinyMCEEditor();
};

我的页面上有其他文本区域不是由 ajax 插入的,它们显示为 WYSIWYG 编辑器没问题,问题是当我添加新元素时。

我检查了其他几个问题,试图找到“答案”,但没有任何效果。

我试图创建一个名为 loadTinyMCEEditor() 的函数,我在调用 ajax 之后在我的 getSecFacility() 函数中调用它。在这个函数中,我试图为这些新添加的文本区域重新初始化 tinyMCE。

loadTinyMCEEditor() 看起来像这样:

function loadTinyMCEEditor() {
    tinyMCE.init({
            selector: "textarea"
      });
    tinyMCE.execCommand('mceAddControl', false, 'test'); //test is the class name I gave this textarea
    //tinyMCE.execCommand('mceAddControl', true, 'test'); //tried setting the bool to true..even tried without these lines
}

无论我尝试什么,我似乎都无法让它与新插入的 textareas 一起工作,我怎样才能让这些 textareas 成为 TinyMCE textareas?

编辑

从下拉列表中进行选择后,我现在可以查看新添加的文本区域的编辑器。但是,这仅适用一次,如果我进行第二次选择,则新的 textareas 仅显示为纯 textareas。这是我在 ajax 函数中所做的更改:

function getFacSecFacility(facsecid, facid) {

    $("#new_section_form").hide();

    $.ajax({
    type: "POST",
    url:  "facility_section_information.php",
    data: 'facility_section_id='+facsecid+'&facility_id='+facid,

    success: function(data){
            $("#selected_fac_section").html(data);
            loadTinyMCEEditor();
    }
   });
};


function loadTinyMCEEditor() {
    tinymce.init({
        selector: "textarea"
    });
}

所以在我做出选择后,这个 ajax 函数将运行并显示新的 textareas + 其他表单信息,并且我重新初始化了 tinymce 编辑器,但由于某种原因,这只能工作一次。

我应该更改/做什么,以便可以从下拉列表中进行多项选择,以便每次新的 textareas 都显示为 tinymce textareas?

【问题讨论】:

  • 回答你的问题后,我意识到了。你的“一堆元素”是什么,因为我没有看到你的 ajax 调用中添加了任何元素?
  • @ilter facility_section_information.php 将 html 元素输出到 div 中,我使用 id="selected_fac_section"。
  • 您的自动插入文本区域到底在哪里?
  • 文本区域在我拥有的表单中,该表单位于facility_section_information.php。
  • 我的意思是,你如何访问它?它有某种选择器吗?身份证,班级,什么?如果您使用带有 textarea 选择器的 tinymce 初始化新创建的 textarea,您也将重新初始化页面上所有现有的 tinymce 编辑器。那不是你想要的。这就是为什么您应该为新创建的 textarea 使用不同的选择器,以便这次只选择它。我希望这是有道理的。你应该在成功回调中初始化它。我希望你能从我的回答中得到原因。试试然后回来。然后我们将看看下一步该做什么;)

标签: javascript jquery html ajax tinymce


【解决方案1】:

您需要使用传入的 ajax 内容调用 tinyMCE.activeEditor.setContent。在您的回调中尝试:

tinyMCE.activeEditor.setContent(data);

问候

【讨论】:

  • 嘿!最后得到一些帮助,我尝试在$("#selected_fac_section").html(data); 之后添加,仍然没有出现。这也是你指的地方,对吗?
  • 我不明白。你试过了吗?这是tinymce的核心方法。如果有多个编辑器,您可以通过tinymce.EditorManager.get('yourEditorId').setContent(data); 获取并设置新内容
  • 如果你使用$('yourEditorId').html(data)你会覆盖编辑器内容的intern结构,比纯html还多,没有任何作用。
  • 是的,我尝试了您在发布的答案中建议的内容。我还尝试添加tinymce.EditorManager.get('withMyIdHere').setContent(data);,但仍然无法显示。
  • 在你这样做之前,就像我建议的那样,你必须通过tinymce .init(...)初始化你的tinymce
【解决方案2】:

如果您想将#selected_fac_section 转换为tinymce 编辑器,您应该在您的成功函数中调用tinymce 的init 函数。除非您另有定义,否则 Ajax 调用是异步的。因此,如果您尝试在 ajax 调用之外初始化 textarea,仍然不会有 textarea 可以用 tinymce 进行装饰,因为 ajax 调用尚未完成。这次使用选择器的 id 值,你应该很高兴。

我是用手机写的,所以在这里写代码很痛苦。对此感到抱歉。只是想在看到您对我的另一个答案发表评论后快速帮助您。早上第一件事会检查这个帖子,以确定您是否需要更多帮助。

【讨论】:

  • 不用担心,不用着急,我也有点忙,我很感谢你的帮助——我对 TinyMCE 还是很陌生——我也会回复这个问题,当我可以查看它时回复。跨度>
  • 好的。我现在要睡觉了:)
  • 我不想将 #selected_fac_section 转换为 tinymce 编辑器,因为这只是一个 div 元素,我在其中转储了 facility_section_information.php 的一堆 PHP 输出,其中包括我要使用的 textarea 的表单转换驻留。在我做$("#selected_fac_section").html(data); 之后,我可以/应该做一些类似$("#myTextAreaID").html(data); 的事情然后初始化tinymce 编辑器吗?抱歉,我对 Ajax 和所有这一切也很陌生,所以我做事的方式可能不太好。
猜你喜欢
  • 2019-10-21
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多