2010-07-11 14 views
0

У меня есть страница, на которой у меня есть div, который мне нужно, чтобы иметь возможность обновлять несколько различных фрагментов кода. Я использую событие onClick в другом div, которое вызывает функцию js для загрузки в соответствующий код.Как обновить div с помощью CKEDITOR?

Когда я первый открыть страницу, то DIV имеет только одну строку:

<textarea name="editor1" rows="35">&lt;p&gt;Edit Area.&lt;/p&gt;</textarea> 

И я использую эту функцию, чтобы получить редактора на экране:

function showEditor() { 
    CKEDITOR.replace('editor1', {height:'450'}); 
} 

(Нет, я Бесполезный Мне нужно было использовать функцию. Это была одна из моих попыток исправить проблему.)

Он отлично работает, пока он используется.

Проблема возникает после загрузки другого набора кода в div. В этот момент, если я попытаюсь загрузить в редактор снова, я получаю сообщение об ошибке, что «editor1» не определен. Ошибка возникает, если «editor1» фактически является частью нового кода, загруженного в div.

Мне кажется, что Javascript не знает о новом элементе «editor1» после новой загрузки и, следовательно, не может выполнить замену.

Мне нужно иметь возможность без разбора загружать все, что мне нужно в div в любое время. Что мне нужно сделать, чтобы это сделать?

Thanks,

Шон.

+0

вы уверены, что загруженный HTML не перезаписывает элемент editor1? и если это новый элемент1? –

ответ

1

Попробуйте

var myEditorInstance = null; 
function showEditor() { 
    if (myEditorInstance) 
     { 
      myEditorInstance.destroy(); 
     // and if you have issues with the above you can try this ;) 
     //CKEDITOR.remove(myEditorInstance); 
     } 

    myEditorInstance = CKEDITOR.replace('editor1', {height:'450'}); 
} 
+0

Не используйте CKEDITOR.remove, потому что он предназначен для внутреннего использования и не очищает DOM. http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.html#.remove – AlfonsoML

+0

@AlfonsoML, действительно, это то, что они говорят в документах, но мое предположение из описания OP заключается в том, что он заменяет div, содержащий редактор (* и последующий динамический код из CK *), и это то, что вызывает проблему ... поэтому следует помнить о DOM-информации CK. Кроме того, это то, что они предлагают на своем форуме по адресу http : //cksource.com/forums/viewtopic.php? f = 11 & t = 15499 –

+0

В этой теме форума объясняется снова и снова, как использовать метод .destroy(). Использование CKEDITOR.remove не позаботится о других элементах, введенных на страницу, таких как контекстные меню, диалоги и ссылки на элементы DOM редактора, все равно останутся в объекте редактора, с прослушивателями событий ... Если вы хочу иметь проблемы с вашими клиентами, заявляя, что браузер ест их память, затем пойдет так, или вы можете так же легко вызвать метод destroy() и забыть об этом. – AlfonsoML

Смежные вопросы