CKEditor和jQuery序列化()问题
CKEditor and jQuery serialize() issue
我在使用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喜欢重新格式化您传递给它的文本,使其成为有效的标记,用HTML实体替换特殊字符,在段落中包装您的内容等。这意味着,尽管您没有更改任何内容,但原始内容和重新格式化的内容可以是不同的。
编辑器实例的初始化被延迟,并且可能在您序列化表单之后发生。即便如此,CKEditor与创建它的(现在隐藏的)文本区域没有强链接,您需要调用编辑器的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);
});
谢谢!我有问题很长一段时间现在与CKEditor文本区域。如果没有在cakephp中提交,我无法更改值。
但现在一切正常。我必须在serialize
之前调用updateElement
,像这样:
CKEDITOR.instances.SurveyBody.updateElement();
var formData = $("#surveyForm").serialize();
如果您同时使用多个CK Editor实例,您可以在序列化表单之前使用更通用的方法:
for (var i in CKEDITOR.instances) {
CKEDITOR.instances[i].updateElement();
};
var data = $('#my-form').serialize();
这些值是uri编码的,因为".serialize()"打算在为传输准备HTTP参数时使用。
您可以通过迭代所有<input>
元素(以及<select>
和<textarea>
,如果适用的话)将所有表单元素的值收集到一个大字符串中。单选按钮变得有点棘手,但它仍然是一个相当小的努力。
来自jQuery文档:
.serialize()方法创建文本标准url编码的字符串符号。
这就是为什么你有那些百分比和数字。尽管它应该返回相同的值,不管你调用它多少次,所以我确信你在两次调用之间对你的表单做了一些事情。
你可以使用不同的方法,比如
var form_changed=false;
$('#edit-job-form :input').change(function () {
form_changed=true;
});
jQuery:input selector
- Ajax发布表单序列化,发布引号'
- 序列化数据属性中对象的最可靠方法
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- 为什么JSON.stringify没有序列化原型值
- 有没有一个Nodejs库可以序列化和反序列化命名组件的路径(比如URL路径名)
- 是否可以在javascript中反序列化java对象
- jQuery Ajax数组序列化错误
- 对象序列化,JAVA,Javascript
- 在jquery中以序列化的形式传递额外的paparameter
- 如何使用angularjs序列化对象
- .NET服务中的JSON反序列化-can'不能解决这个问题
- 表单序列化问题
- C#到JavaScript序列化问题
- 为JSON序列化以html形式生成数组时出现问题
- Web2py: json序列化器和javascript有关于python字符串引号的问题
- jQuery更改事件,jQuery中表单序列化的问题
- 将JSON对象反序列化为C#对象时,integer List的反序列化问题
- Javascript序列化数组多个表单问题
- JSON 序列化问题:意外令牌
- CKEditor和jQuery序列化()问题