gpt4 book ai didi

javascript - CKEditor 和 jQuery serialize() 问题

转载 作者:可可西里 更新时间:2023-11-01 01:58:15 24 4
gpt4 key购买 nike

我在使用 jQuery serialize() 函数时遇到问题。

在上下文中,我正在打开一个表单并检查对其所做的更改,因此当表单加载时,我序列化数据并将其分配给一个全局变量:

form_data.edit_initial = $('#edit-job-form').serialize();

这很好。

然后当我点击一个按钮离开表单时,它会执行此检查:

var start = form_data.edit_initial;
var end = $('#edit-job-form').serialize();

if (start == end)
{
// Do button action
}
else
{
// Open confirm dialogue
}

无论如何。两个 serialize() 函数都有效,但第二个函数将撇号等转换为一系列数字和百分比符号(我可以放心地假设是撇号的一些代码)。

有什么想法吗?这意味着即使没有进行任何更改,对话框也会打开并提示表单已在未保存的情况下更改。

求助!

这是一些示例数据。

我正在使用 CKEditor 实例。

第一个结果的一部分:

&edit_time_digital=60&edit_desc=%3Cp%3E%0D%0A%09They'd+like+the+share+their+site+incase+people+want+to+see+their+entire+collection+of+furnature.%3C%2Fp%3E%0D%0A%3Cp%3E%0D%0A%09The+site+needs+the+following%3A%3C%2Fp%3E%0D%0A%3Cul%3E%0D%0A%09%3Cli%3E%0D%0A%09%09Home+page%3C%2Fli%3E%0D%0A%09%3Cli%3E%0D%0A%09%09Standard+pages%3C%2Fli%3E%0D%0A%09%3Cli%3E%0D%0A%09%09Galleries+(By+category)%3C%2Fli%3E%0D%0A%09%3Cli%3E%0D%0A%09%09Contact+page%3C%2Fli%3E%0D%0A%09%3Cli%3E%0D%0A%09%09News+listings%3C%2Fli%3E%0D%0A%3C%2Ful%3E%0D%0A%3Cp%3E%0D%0A%09It+should+be+a+very+simple+generator+build.%3C%2Fp%3E%0D%0A&edit_status=active` 

第二个:

&edit_time_digital=60&edit_desc=%3Cp%3E%0D%0A%09They%26%2339%3Bd+like+the+share+their+site+incase+people+want+to+see+their+entire+collection+of+furnature.%3C%2Fp%3E%0D%0A%3Cp%3E%0D%0A%09The+site+needs+the+following%3A%3C%2Fp%3E%0D%0A%3Cul%3E%0D%0A%09%3Cli%3E%0D%0A%09%09Home+page%3C%2Fli%3E%0D%0A%09%3Cli%3E%0D%0A%09%09Standard+pages%3C%2Fli%3E%0D%0A%09%3Cli%3E%0D%0A%09%09Galleries+(By+category)%3C%2Fli%3E%0D%0A%09%3Cli%3E%0D%0A%09%09Contact+page%3C%2Fli%3E%0D%0A%09%3Cli%3E%0D%0A%09%09News+listings%3C%2Fli%3E%0D%0A%3C%2Ful%3E%0D%0A%3Cp%3E%0D%0A%09It+should+be+a+very+simple+generator+build.%3C%2Fp%3E%0D%0A&edit_status=active

最佳答案

正如您在原始帖子的评论中提到的,我假设您使用的是 CKEditor 并且在您的 jQuery 就绪函数中(或在您的文档加载后的某个地方)您将文本区域替换为编辑器实例。 CKEditor,像大多数 WYSIWYG 编辑器一样,喜欢重新格式化您传递给它的文本,使其成为有效标记,用 HTML 实体替换特殊字符,将您的内容包装在一个段落中,等等。这意味着虽然您没有更改任何内容,但原始并且重新格式化的内容可以不同。

编辑器实例的初始化被延迟,并且可能发生在您序列化表单之后。即便如此,CKEditor 与创建它的(现在隐藏的)textarea 没有强链接,您需要调用编辑器的 updateElement 函数来刷新所有更改。它通常在表单提交时自动执行,这就是您在提交处理程序中获取重新格式化内容的原因。

因此,您只需确保在第一次序列化之前调用 updateElement 函数,最好的位置是在编辑器加载之后。幸运的是有一个事件,假设有以下 HTML 标记:

<form id="myForm">
<textarea name="test" id="myEditor">My random text</textarea>
</form>

jQuery 就绪函数:

$(function(){
function SerializeForm(){
// Make sure we have the reformatted version of the initial content in the textarea
CKEDITOR.instances.myEditor.updateElement();

// Save the initial serialization
form_data.edit_initial = $('#myForm').serialize();
}

// You might as well leave it here in case CKEditor fails to load
form_data.edit_initial = $('#myForm').serialize();

// Create editor instance
CKEDITOR.replace('myEditor');

// Tap into CKEditor's ready event to serialize the initial form state
CKEDITOR.instances.myEditor.on("instanceReady", SerializeForm);
});

关于javascript - CKEditor 和 jQuery serialize() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5716644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com