TinyMCE onsubmit 不填充文本区域。

TinyMCE onsubmit does not fill the textareas.

你能告诉我如何在表单提交到相应的文本区域时获得所见即所得的内容吗?

我对表单提交进行了 javascript 验证,但是当触发验证代码时,编辑器文本区域为空。所以我仍然得到一个错误"Field is required..."。我不明白 TinyMCE 是如何处理这个的,但这没有任何意义。我的 js 验证事件侦听器位于 scritps 的最后,但文本区域仍然是空的。

是否有一些触发器强制 TinyMCE 在提交时用内容填充文本区域?

默认情况下,当通过标准 HTML 表单提交提交表单时,TinyMCE 将自动更新底层 <textarea>。这是 TinyMCE 中的内置行为,因为大多数应用程序不需要保持 <textarea> 持续同步的开销。

如果您不依赖于标准 HTML 表单提交事件,您有几个选择...

当您开始 AJAX 表单提交过程时:

TinyMCE 有一个 triggerSave() 方法强制编辑器立即与 <textarea> 同步。

https://www.tinymce.com/docs/api/tinymce/root_tinymce/#triggersave

当您的用户想要提交表单然后执行您的验证时,您可以首先调用 triggerSave()

TinyMCE 事件:

正如您对自己问题的回答表明,您当然可以依靠各种编辑器事件通过 triggerSave() 方法将编辑器同步到 <textarea>。这没有技术问题,只要知道如果您依赖更改事件之类的东西,您可能会触发大量此类事件。如果您有 large/complex HTML 内容或一个页面上的许多编辑器不断与基础 <textarea> 同步,可能会影响浏览器的性能。

哪个更好?

如果您不需要实时验证内容... 只需在 AJAX 提交过程开始时调用 triggerSave()可能更容易(不需要 TinyMCE 配置代码绑定到所需的事件)并且为浏览器创建更少的开销。

如果您确实需要实时验证内容... 使用更改事件之类的事件来同步 <textarea> 是更好的解决方案。它可能看起来像这样:

tinymce.init({
  selector: "#myTextarea",
  ...
  setup: function (editor) {
      editor.on('change', function () {
          tinymce.triggerSave();
      });
  }
});