Jquery 为什么我的动态CMS表单不是每次都加载?
我正在使用CKEditor创建CMS的一部分,供用户输入内容。“我的CMS”是一个位于顶部的栏/菜单,其中包含站点的各个部分,供用户创建、更新或删除条目 当用户选择一个选项时,我使用jquery AJAX$.post将表单项的请求发送到php。函数返回代码,我使用$('#loadCMS').html(数据)创建表单,而无需重新加载页面。这项工作非常好,调试总是显示返回的正确代码 但是,CKEditor仅在第一次选择项目时加载。它可能会再次加载,但很少 CKEditor是位于头部的javascript,它用编辑器替换指定的文本区域Jquery 为什么我的动态CMS表单不是每次都加载?,jquery,ajax,dynamic,ckeditor,Jquery,Ajax,Dynamic,Ckeditor,我正在使用CKEditor创建CMS的一部分,供用户输入内容。“我的CMS”是一个位于顶部的栏/菜单,其中包含站点的各个部分,供用户创建、更新或删除条目 当用户选择一个选项时,我使用jquery AJAX$.post将表单项的请求发送到php。函数返回代码,我使用$('#loadCMS').html(数据)创建表单,而无需重新加载页面。这项工作非常好,调试总是显示返回的正确代码 但是,CKEditor仅在第一次选择项目时加载。它可能会再次加载,但很少 CKEditor是位于头部的javascri
<head>
...
<script type="text/javascript" src="/ckeditor/ckeditor.js"></script>
...
</head
<textarea name="editor1"></textarea>
<script type="text/javascript">
CKEDITOR.replace( "editor1",
{
toolbar :
[
['Source'],
['Cut','Copy','Paste','PasteText','PasteFromWord','-', 'SpellChecker'],
['Undo','Redo','-','RemoveFormat'],
['Bold','Italic','Underline'],
['Subscript','Superscript'],
['NumberedList','BulletedList'],
['Link','Unlink'],
['Image','Flash','HorizontalRule','SpecialChar','Format'],
['Maximize', 'ShowBlocks','-','About']
],
width : '1000',
height : '300',
filebrowserBrowseUrl : '/ckfinder/ckfinder.html',
filebrowserImageBrowseUrl : '/ckfinder/ckfinder.html?Type=Images',
filebrowserFlashBrowseUrl : '/ckfinder/ckfinder.html?Type=Flash'
});
</script>
表单每次都是动态创建的。但是,由CKEditor替换的textarea并不总是替换,它只是空白,甚至textarea框也不显示。第一次进行选择时,它会起作用。如果用户选择创建一个新的博客条目,文本区域将被替换;如果用户选择更新bio,即使用户返回创建一个新的博客条目,文本区域也不会被替换
-----------------解决方案-------------------------
动态php
$key = md5(time().rand())
<textarea name="'.$key.'"></textarea>
<script type="text/javascript">
CKEDITOR.replace("'.$key'",
{
.....
});
<input type="hidden" value="'.$key.'" name="content1Key" />
</script>
CKEditor对动态创建表单非常挑剔,因为它们存储引用的方式(我相信是一种)。尝试为每个文本框指定一个唯一的名称,以避免它试图返回一个已被破坏/覆盖的现有引用,并且在加载每个新表单后,您需要调用
CKEDITOR.replace
我知道这是一个奇怪的概念,很难解释。是的,似乎这就是问题所在。但是现在每一个都能工作一次。如果我有3个编辑器,我有3个唯一的名称,另一个具有唯一名称的选项现在可以工作,但如果我返回,它将无法工作,因为它已经被“销毁/覆盖”。因此,基本上,CKEditor保留了textarea的名称,以防止数据被覆盖。当页面重新加载时,数据丢失,允许再次编辑文本区域。我只需要弄清楚如何强制CKEditor不这样做,或者告诉它在选择新项目时释放它们textarea名称。表单名称在表单刷新之间是唯一的吗?每次获取表单时,它都需要一个唯一的名称,请尝试附加当前时间戳。只需尝试一下。表单名称不是依赖项。textarea名称为。但是,当我提交表单时,我需要知道文本区域的名称,以便将其发布到php。因此,加载速度相当快,因此如果我有3个编辑器,它们的时间戳与其名称相同,因此只有第一个编辑器起作用。
$key = md5(time().rand())
<textarea name="'.$key.'"></textarea>
<script type="text/javascript">
CKEDITOR.replace("'.$key'",
{
.....
});
<input type="hidden" value="'.$key.'" name="content1Key" />
</script>
$content1Key = $_POST['content1Key'];
$content1 = $_Post[$content1Key];