为什么TinyMCE在通过jQuery发布内容时不会检测到文本中的更改


Why TinyMCE doesn't detect changes in text when the content is posted through jQuery?

我在我的网站上使用TinyMCE来编辑文本区域并将内容发布到数据库。但是,我遇到的问题是,当我按下表单的"提交"按钮并将内容(通过ajax - jQuery)发布到PHP文件时,在许多情况下,发布的文本等于null(即未检测到TinyMCE文本区域中的更改)。

这是我与类"richArea"关联的TinyMCE表单的代码

<form id="uploadMixedBoxForm" method="post" action="'.$websiteURL.'/resources/changeText.php">
<p><strong>'._("Text:").'</strong></p>
<textarea name="mixTextAdd" class="richArea"></textarea>
<input type="submit" class="nicerButton" value="'._("Submit").'" />
</form>

这是接收数据的PHP文件

<?php
if (!isset($_POST[mixTextAdd]) or $_POST[mixTextAdd] == "") { 
echo '<div class="error"><i class="icon-thumbs-down icon-2x"></i> '._("No text content.").'</div>';
exit;
}
addToDatabase(mixTextAdd);
?>

从表单接收数据的 PHP 文件具有一个简单的控件,如果文本区域的内容为 null,则输出错误。行为是,当我在 tinymce 区域中键入文本并按提交时,我总是收到错误,告知文本丢失,但是,如果我再次按提交,则会检测到文本,因此不会出现错误。这种情况总是系统地发生。如果我通过 jQuery 禁用帖子并在不使用 ajax 的情况下简单地发布到第二个页面,一切正常

我读到TinyMCE

没有检测到文本更改的事实可能是由于与控制撤消功能相关的性能问题,但是在我的情况下,当我键入文本时,撤消级别被激活(即撤消按钮变为活动状态,因此TinyMCE检测到文本更改)。

要在 JavaScript 中访问 tinyMCE 编辑器的内容,您需要使用

tinyMCE.get('mixTextAdd').getContent();

而不是直接访问文本区域(例如,通过$('#mixTextAdd'))。这可能是问题所在吗?(显然我在这里猜测,因为您没有发布用于进行 AJAX 调用的代码 - 所以如果您已经涵盖了这一点,请道歉!

似乎TinyMCE编辑器实例不直接编辑文本区域,或者至少这是通过ajax提交TinyMCE内容时的行为。因此,我通过将tinyMCE.triggerSave()直接添加到表单的onclick事件来解决。

<form id="uploadMixedBoxForm" method="post" action="'.$websiteURL.'/resources/changeText.php">
<p><strong>'._("Text:").'</strong></p>
<textarea name="mixTextAdd" class="richArea"></textarea>
<input type="submit" class="nicerButton" onclick="tinyMCE.triggerSave()" value="'._("Submit").'" />
</form>