使用 htmx 和 tinymce 时出现错误列表

Posted

技术标签:

【中文标题】使用 htmx 和 tinymce 时出现错误列表【英文标题】:getting errolist when using htmx and tinymce 【发布时间】:2021-12-24 05:49:17 【问题描述】:

我正在尝试使用 htmx 和使用 tinymce 的富文本编辑器实现发布请求。

我的表格:

    <!--<form method="POST"> % csrf_token %-->
    <form onsubmit='copyContent()' method= "post" hx-post= "% url 'forum:forum-detail' post.pk %" hx-swap="innerhtml" hx-target = "#comment-list">
        <div class="modal-body">
            <div class="form-group">
                <label for="threadTitle">Your Answer</label>
                <textarea name="reply" class="form-control summernote" placeholder="Input your answer here"></textarea>
            </div>
        </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-light" id="cancelForm">Cancel</button>
            <button type="submit" class="btn btn-primary" name="btn-post-question">Post</button>
        </div>
    </form>

我得到的错误:

<ul class="errorlist"><li>reply<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

当我在 TinyMCE 中使用传统的 post 请求时,它工作得很好。

当我在没有 TinyMCE 的情况下使用 htmx 时,它的工作也很好。

当我将 htmx 和 TinyMCE 结合起来时,我得到了错误。

我的 tinymce 初始化:

tinymce.init(
      selector: 'textarea',
      body_id : "reply",
      height: 200,
      plugins: 'a11ychecker advcode casechange export formatpainter linkchecker autolink lists checklist media mediaembed pageembed permanentpen powerpaste table advtable tinycomments tinymcespellchecker image code',
      toolbar: 'a11ycheck addcomment showcomments casechange checklist code export formatpainter pageembed permanentpen table image',
      toolbar_mode: 'floating',
      tinycomments_mode: 'embedded',
      tinycomments_author: 'Author name',
   );

【问题讨论】:

copyContent() 函数有什么作用?您使用的是哪个 TinyMCE 版本? @Dauros 我想我使用的是 tinymce 5。我的其他表单有一个可编辑的输入而不是 textarea,因为 django 表单在提交之前只识别 textarea 我将 innerhtml 从可编辑复制到 textarea。然后我尝试在这里使用相同的方法将textarea复制到tinymce生成的那个。或者我认为这是问题导致生成的 iframe 没有相同的名称,在这种情况下是“回复”。但似乎这不是导致问题的原因 您应该先尝试一下,不要手动复制字段。我尝试使用带有 django-tinymce 包的干净 Django 实例重现您的问题,但它开箱即用地运行良好。 iframe 中的 TinyMCE 自动将编辑器的内容与 textarea 同步,并且 HTMX 正在发送正确的表单数据。 我在使用 Django、HTMX 和 TincyMCE 时看到了类似的东西。似乎在使用 HTMX 表单事件时,Tiny 在表单提交上触发的任何事件都没有被触发。我的字段不是必需的,所以我没有看到该错误,但是调用 HTMX 表单触发事件时 没有得到更新。 【参考方案1】:

这就是为我解决这个特殊问题的方法。

在这种情况下,当 HTMX 事件触发时,tinyMCE.triggerSave() 方法没有被触发。因此,您需要做的是在您的 HTMX 预请求事件之一期间调用该方法。在这种情况下,我使用了 htmx:configRequest 事件,但是可能有更好的 HTMX 事件可供使用。

例子:

document.body.addEventListener('htmx:configRequest', (event) => 

    // trigger the rich text editor save method
    tinyMCE.triggerSave();

    // update the parameter in request
    richContent = document.querySelector('# your form field id');
    event.detail.parameters[' your form field name '] = richContent.value;
)

由于 HTMX 事件的触发方式,一旦 htmx:configRequest 事件触发,表单值已经被收集,因此您需要更新请求中的字段值。也许有一些更好的方法可以做到这一点,但这对我有用。

【讨论】:

以上是关于使用 htmx 和 tinymce 时出现错误列表的主要内容,如果未能解决你的问题,请参考以下文章

使用元组列表重塑数组时出现 mypy 错误

为啥在使用 readlines() 读取文件时出现列表索引超出范围错误?

使用 Gmail api 时尝试获取电子邮件列表时出现错误 [403]

在列表中使用 add 时出现 ArgumentOutOfRange 错误。 Unity C# [重复]

使用 Spotipy 将曲目添加到播放列表时出现多个错误

尝试从列表播放时出现 MediaPlayer 错误