Как правильно уничтожить экземпляр CKEditor?
Я запускаю CKeditor 3.4 на довольно простой странице. У меня проблема (иногда), когда я вызываю document.main_form.submit(), она не будет отправлять содержимое текстового поля. После некоторого чтения, похоже, что CKeditor не разрушает должным образом. Я попытался вручную уничтожить его, прежде чем сохранять форму, но не смог ее назвать. Странно, это работает иногда, но не другие. Я нахожусь в Chrome, так что это может быть связано с вещами, но то же самое происходит в Firefox.
Как я могу правильно уничтожить CKeditor, чтобы он всегда отправлял текстовые данные в POST. Спасибо!
Ответы
Ответ 1
У меня была эта проблема. Какая боль.
Чтобы правильно уничтожить экземпляр редактора, попробуйте
if (CKEDITOR.instances.myInstanceName) CKEDITOR.instances.myInstanceName.destroy();
Из документации здесь
Я решил проблему нехватки содержимого, назначив содержимое редактора скрытому полю до обратной передачи. Я использую ASP.Net, но он должен работать повсеместно.
в клиенте на стороне клиента кнопки отправки, вызовите
if (CKEDITOR.instances.myInstanceName)
document.getElementById('hiddenField').value = CKEDITOR.instances.getData();
Ответ 2
Я когда-то использовал angilejs ui-router с одним экземпляром CKEDITOR для каждого подзадачи. Я использовал следующее решение для очистки экземпляров каждый раз при загрузке ui-view
for(name in CKEDITOR.instances)
{
CKEDITOR.instances[name].destroy()
}
Ответ 3
В моей ситуации
CKEDITOR.instances.myInstanceName.destroy();
не помогло, потому что я открыл CKEditor в jquery dialog
, дважды нажав на какой-то элемент. Когда я закрыл редактор, а затем снова открыл их, мой код разбился.
Решение использовало
CKEDITOR.instances.myInstanceName.destroy(false);
который обновил элемент DOM (ссылка на документацию).
Ответ 4
используйте этот простой код. Заметьте, что мой идентификатор текстовой области editor1.
или Вы также можете проверить его с помощью console.log(CKEDITOR.instances.editor1);
if (CKEDITOR.instances.editor1) {
CKEDITOR.instances.editor1.destroy();
}
Ответ 5
for(name in CKEDITOR.instances){
CKEDITOR.instances[name].destroy()
}
Использовать для кода, чтобы уничтожить все экземпляры, созданные ckeditor
Ответ 6
решение, которое наконец-то сработало.
Проблема заключалась в том, что вы уничтожаете ckeditor и впоследствии пытаетесь заменить текстовое поле, которое не работает.
Я нашел этот простой пример, который дал мне ключ. Используйте div и добавьте ckeditor вместо замены вызова api
http://ckeditor.com/latest/samples/old/ajax.html
<div id='emailEditor1'>
</div>
function closeTab() {
emailEditor1.destroy();
emailEditor1 = null;
}
function createEditor()
if (emailEditor1 == null) {
emailEditor1 = CKEDITOR.appendTo( 'emailEditor1');
}
}
Ответ 7
$this->widget('cms.extensions.fancybox.EFancyBox', array(
'target' => 'a#fancy-link',
'config' => array( 'onClosed'=>'js:function(){for(name in CKEDITOR.instances){ CKEDITOR.instances[name].destroy(true);}}'
)));