无法从动态添加的CKEditor textarea中读取数据

时间:2015-01-12 09:00:01

标签: javascript jquery html jsp ckeditor

我们目前正在开发一个java Web应用程序,其中一个jsp页面将动态生成富文本区域,我们正在使用CKEditor来实现此目的。我能够动态生成文本编辑器。在jsp页面上有一个按钮,点击它时,一个java脚本方法将一个带有textarea的新行添加到表中。添加行后,我们使用CKEDITOR.replace(' editorName');将textarea替换为CKEditor的方法。以下是代码:

JSP:

<table id="StepsList" style="float: left" width="100%" ></table>

我们维护一个变量rowNum来跟踪创建的textarea的数量。

脚本:

var step = 'step'+rowNum;
$("#StepsList").append("<tr><td><div class='richTextareaWrapp bottmsp' style='margin-top:10px;'><textarea cols='40' id="+step+" name="+step+"></textarea></div></td></tr>");
CKEDITOR.replace(step);

要读取生成的CKEditors的内容,我们将基于rowNum进行迭代。下面是用java脚本文件编写的代码:

脚本:

for(var j=1;j<=rowNum;j++){
        obj = new Object();
        step = '#step'+j;
        $(step).ckeditor(function( textarea ){
            obj.value=$(textarea).val();
          });

        jsonStepsArr.push(obj);
    }

这会抛出一个错误,说&#34; 未捕获的异常:编辑器实例&#34; step1&#34;已附加到提供的元素。&#34;

我在stackoverflow和google上搜索了类似的帖子,其中大多数建议更换或销毁实例。但它不符合我的目的。任何人都可以指出我的错误,或者我是否必须添加任何代码才能使其工作?

提前致谢。

1 个答案:

答案 0 :(得分:0)

在创作/访问技巧方面保持一致。

看起来您是否要创建一个正常CKEDITOR.replace调用的编辑器,如:

CKEDITOR.replace( 'editor1' );

然后使用jQuery调用访问它,如:

$( '#editor1' ).ckeditor( function( textarea ) {
    // Do whatever...
} );

它不会互相玩得很好。

您的解决方案:

因此,要么将您的第一个电话改为:

$('#'+step).ckeditor();

或者在第二次调用中使用jQuery,只需直接访问实例:

CKEDITOR.instances[ 'step'+j ].getData()