我正在使用CKEditor创建CMS的一部分,供用户输入内容。我的CMS是顶部的栏/菜单,其中包含用户创建,更新或删除条目的网站部分。
当用户选择一个选项时,我使用jquery AJAX $ .post将表单项的请求发送到php。该函数返回代码,我使用$('#loadCMS')。html(data)创建表单而不重新加载页面。这项工作很棒,调试总是显示返回的正确代码。
但是,CKEditor仅在第一次选择项目时加载。它可能会再次加载但很少见。
CKEditor是javascript,位于头部并用编辑器替换指定的textareas
<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>
jquery的
$('#portfolioCreate').click(function()
{
var detailsList = new Array('title','medium','original');
$.post('cms.php',{detailsList: detailsList,images:"imageOn",subimgNum:0,content1:"Comments"},
function(data)
{
$('#loadCMS').html(data);
$('#debug').val(data);
});
});
每次动态创建表单。然而,被CKEditor取代的textareas并不总是取代,它只是空白,甚至没有textarea框显示。第一次选择它是有效的。如果用户选择创建新的博客条目,则替换文本区域,如果他们然后选择更新bio,则即使他们返回创建新的博客条目,也不会替换文本区域。
----------------- SOLUTION -------------------------
动态php
$key = md5(time().rand())
<textarea name="'.$key.'"></textarea>
<script type="text/javascript">
CKEDITOR.replace("'.$key'",
{
.....
});
<input type="hidden" value="'.$key.'" name="content1Key" />
</script>
php从表单中提取
$content1Key = $_POST['content1Key'];
$content1 = $_Post[$content1Key];
答案 0 :(得分:1)
CKEditor非常挑剔动态创建表单,因为它们存储引用的方式(我相信一个global array keyed by textarea name)。尝试为每个文本框指定一个唯一的名称,以避免它尝试返回已被销毁/覆盖的现有引用,并在加载每个新表单后,您需要调用CKEDITOR.replace
。