为什么我的动态CMS表单不是每次都加载?

时间:2010-08-29 16:06:09

标签: jquery ajax dynamic ckeditor

我正在使用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];

1 个答案:

答案 0 :(得分:1)

CKEditor非常挑剔动态创建表单,因为它们存储引用的方式(我相信一个global array keyed by textarea name)。尝试为每个文本框指定一个唯一的名称,以避免它尝试返回已被销毁/覆盖的现有引用,并在加载每个新表单后,您需要调用CKEDITOR.replace