【问题标题】:Text in CKEDITOR field not being submitted in the first submission第一次提交时未提交 CKEDITOR 字段中的文本
【发布时间】:2019-08-27 13:43:26
【问题描述】:

第一次提交表单时不发送ckeditor字段中的文本(仅在第二次、第三次等)。

例如,如果尝试创建一篇文章的帖子并提交表单,我会收到验证错误:“body 字段是必需的”。如果尝试再次提交(第二次或第三次),它会正常工作。

真正的问题是在编辑时!例如,在编辑表单时,“body”字段以及其他字段中会填写数据库中的数据。换句话说,ckeditor 字段中已经有文本。

如果我第一次尝试提交表单它不会更新body,因为ckeditor 中的文本没有发送;发送的是默认值(旧文章的body,是用DB的数据填写的)。

因此,除非我在其他字段中收到验证错误,否则它不会编辑(如果我收到验证错误,我将不得不再次提交,这将起作用)。

如何解决这个问题?这是CKEDITOR 4 中的已知错误吗?如果我不解决它,如果用户必须至少提交两次表单来编辑或创建文章,他们会感到沮丧。

这是我正在使用的插件列表(可能对解决问题有用):

a11yhelp, about, api, autocomplete, autocorrect, browser, clipboard, colordialog, copyformatting, crossereference, dialog, div, docprops, find, googlesearch, image, link, liststyle, magicline, mathjax, openlink, pastecode, pastefromword, preview , quicktable, scayt, section, showblocks, sourcedialog, specialchar, table, tableselection, tabletools, tabletoolstoolbar, texttransform, widget, wsc

顺便说一句,我在他们的官方网站上使用ckeditor builder下载了ckeditor

【问题讨论】:

    标签: ckeditor ckeditor4.x


    【解决方案1】:

    我在 GitHub 上打开了这个问题,一个人发现了这个问题。他提出的解决方案效果很好!!他是这样说的:

    解决方法

    由于这个问题比看起来更难解决,所以现在我提出一个 简单的解决方法:调用ajaxRequest 而不是$( document ).ready, 而是在编辑器的加载事件上:

    CKEDITOR.replace( 'editor', {
      on: { 
             loaded: function() {ajaxRequest();}
          }
      });
    

    问题说明

    问题与如何为给定的 DOM 侦听器注册有关 元素:

    特定事件类型的事件侦听器的顺序将始终 是:

    • 在第一次将事件处理程序的值设置为非 null 之前向 addEventListener() 注册的事件侦听器
    • 然后是当前设置的回调,如果有的话
    • 最后,在第一次将事件处理程序的值设置为非 null 后,向 addEventListener() 注册的事件侦听器。

    在 CKEditor 4 的情况下,表单元素的值被修改为 editor._attachToForm 私有方法,将事件监听器添加到 表单的提交事件:

    ckeditor-dev/core/editor.jsform.on( 'submit', onSubmit );

    然而,这个监听器是在加载的事件上添加的,该事件被触发 加载编辑器时异步 - 所以在注册之后 带有验证逻辑的同步 onsubmit 处理程序。这边走 编辑器的字段在验证后更新。

    建议的解决方案

    formdata 事件上更新编辑器元素。这样我们就有了 完全控制提交的数据,我们确信 在提交事件之前设置正确的数据。这个问题 解决方案是浏览器不支持这一事实;事件 将出现在 Chrome 77 中,但尚不清楚是否以及何时 支持将出现在 Firefox 或 Safari 中。

    在编辑器内容的每次更改时更新编辑器元素谢谢 改变事件。此解决方案还将解决一些其他情况 脚本使用的值不是来自编辑器,而是直接来自 替换了textarea——他们会更频繁地获得新数据 提交表格后。但是这个解决方案需要#1364,它 与相当大的重构相关。

    注意AjaxRequest 是我用来与Jquery 一起提交表单的函数。

    【讨论】:

      猜你喜欢
      • 2017-03-17
      • 1970-01-01
      • 2012-12-03
      • 2014-08-15
      • 2017-07-27
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多