You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CKeditor编辑笔记首次保存异常:P标签返回旧值而非更新值

问题分析

问题核心在于获取CKEditor内容的方式错误:你直接从DOM的<p>标签读取HTML,但CKEditor在编辑过程中,实际内容是由编辑器实例内部维护的,首次编辑后DOM并未同步更新最新内容,导致首次保存时发送的是旧值;第二次保存时页面已重新加载,DOM同步了更新后的数据,所以能取到正确值。

解决方案

修改前端代码,通过CKEditor实例的getData()方法获取最新编辑内容,而非直接读取DOM元素的HTML,同时优化AJAX回调逻辑避免数据不一致。

1. 修正saveDes函数

替换获取内容的逻辑,从编辑器实例读取最新内容:

function saveDes(hoverId) {
    debugger;
    $("#" + hoverId).removeClass('col-md-8');
    $("#" + hoverId).find('#dot').css('display', 'block');
    $("#" + hoverId).find('.btn-footer').css('display', 'none');
    var dataId = $("#" + hoverId).attr("data-id");
    
    // 从CKEditor实例获取最新编辑内容
    var editorElement = document.getElementById(hoverId);
    var editor = editors.get(editorElement);
    var data = editor ? editor.getData() : $("#" + hoverId).find("p").html();
    
    if (data != "" && data != undefined) {
        updateNote(dataId, data);
    }
}

2. 优化AJAX回调逻辑

原代码中saveDes直接调用loadListView()会导致AJAX请求未完成就刷新页面,可能引发数据不一致,将刷新逻辑统一放到updateNote的成功回调中:

function updateNote(dataId, description) {
    debugger;
    var id = dataId;
    $.ajax({
        type: 'POST',
        url: '/Note/EditNote',
        contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
        data: { Id: id, Description: description },
        success: function (response) {
            if (response.status == 400) {
                toastr.error(response.message);
            }
            else if (response.status == 200) {
                loadListView();
            }
        },
        error: function() {
            toastr.error('保存失败,请重试');
        }
    });
}

3. 可选优化:避免重复创建编辑器

原createEditor通过点击事件触发,可能重复创建编辑器实例,添加判断逻辑避免重复:

function createEditor(elementToReplace) {
    // 检查是否已存在编辑器实例
    if (editors.has(elementToReplace)) {
        return Promise.resolve(editors.get(elementToReplace));
    }
    return ClassicEditor
        .create(elementToReplace)
        .then(editor => {
            editors.set(elementToReplace, editor);
            return editor;
        })
        .catch(err => console.error(err.stack));
}
额外检查点
  • 确认后端UpdateNote方法正确接收并更新description参数到数据库;
  • 检查_NotesList视图是否通过@Html.Raw正确渲染更新后的HTML内容。

内容的提问来源于stack exchange,提问作者Ruman Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:37:45