CKEditor исчезает после второй загрузки AJAX - PullRequest
2 голосов
/ 20 апреля 2011

Я получаю этот код через ajax:

<script>
$(function(){
$('#responseContent').ckeditor();
});
</script>
<textarea id='responseContent'></textarea>

Он успешно генерирует панель CKEditor для прекрасного редактирования текста.

Когда этот же фрагмент кода вызывается во второй раз,Я получаю пустую область.Как ни странно, когда я делаю «элемент проверки» того, где должна быть текстовая область / ckeditor, она говорит:

<textarea id="responseContent" style="visibility: hidden; "></textarea>

Итак, будучи профессиональным хакером, я делаю это так:видимый.CSS застрял, но результаты не выглядели иначе.

Как заставить ckeditor работать ... все время ... с данными, сгенерированными ajax?

РЕДАКТИРОВАТЬ: Просто чтобы бытьясно, я не верю, что это проблема CSS.Я считаю, что это проблема jquery / ckeditor.

Ответы [ 4 ]

6 голосов
/ 21 апреля 2011

Найден ответ здесь: Экземпляр CKEditor уже существует

if(CKEDITOR.instances[editorName]) {
delete CKEDITOR.instances[editorName];
CKEDITOR.replace(editorName);
}

Одной вещью, в которой я не был уверен (будучи нубом ckeditor), было "editorName". Это идентификатор элемента, на котором он создан. Я считаю, что это может быть и имя класса, если вы использовали его для его создания.

Итак, в моем примере в оригинальном вопросе:

<script>
    $(function(){
    $('#responseContent').ckeditor();
});
</script>
<textarea id='responseContent'></textarea>

Я бы исправил это так:

if(CKEDITOR.instances["responseContent"]) {
    delete CKEDITOR.instances["responseContent"];
    // I replaced this step
    // CKEDITOR.replace("responseContent");
    // With this:
    $('#responseContent').ckeditor();
}
0 голосов
/ 13 марта 2013

Этот скрипт может помочь вам с текстовыми областями, загруженными ajax, с классом .ckeditor:

$('#edytuj_promocje').load('your_php_file_with_ckeditor_textarea.php', function(){

   $.each(CKEDITOR.instances, function(){
     eval("CKEDITOR.instances."+this.name+".destroy(true)");
   });
   $('.ckeditor').each( function(){ 
    CKEDITOR.replace(this);
   });
});
0 голосов
/ 30 сентября 2012

Правильный путь таков:

jQuery.each(CKEDITOR.instances, function(){
     eval("CKEDITOR.instances."+this.name+".destroy(true)");
});
0 голосов
/ 20 апреля 2011

Я предполагаю, что вы пытаетесь заполнить один и тот же экземпляр ckeditor другим содержимым, правильно?

Если это так, то есть другие способы изменить это содержимое.Попытка создать дополнительный экземпляр вызовет у вас проблемы.

http://ckeditor.com/blog/CKEditor_for_jQuery

Прокрутите вниз до пункта «Взаимодействие кода с экземплярами редактора»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...