Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 为什么我的动态CMS表单不是每次都加载?_Jquery_Ajax_Dynamic_Ckeditor - Fatal编程技术网

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

Jquery 为什么我的动态CMS表单不是每次都加载?,jquery,ajax,dynamic,ckeditor,Jquery,Ajax,Dynamic,Ckeditor,我正在使用CKEditor创建CMS的一部分,供用户输入内容。“我的CMS”是一个位于顶部的栏/菜单,其中包含站点的各个部分,供用户创建、更新或删除条目 当用户选择一个选项时,我使用jquery AJAX$.post将表单项的请求发送到php。函数返回代码,我使用$('#loadCMS').html(数据)创建表单,而无需重新加载页面。这项工作非常好,调试总是显示返回的正确代码 但是,CKEditor仅在第一次选择项目时加载。它可能会再次加载,但很少 CKEditor是位于头部的javascri

我正在使用CKEditor创建CMS的一部分,供用户输入内容。“我的CMS”是一个位于顶部的栏/菜单,其中包含站点的各个部分,供用户创建、更新或删除条目

当用户选择一个选项时,我使用jquery AJAX$.post将表单项的请求发送到php。函数返回代码,我使用$('#loadCMS').html(数据)创建表单,而无需重新加载页面。这项工作非常好,调试总是显示返回的正确代码

但是,CKEditor仅在第一次选择项目时加载。它可能会再次加载,但很少

CKEditor是位于头部的javascript,它用编辑器替换指定的文本区域

<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];