Подтвердить что ты не робот

Как правильно уничтожить экземпляр CKEditor?

Я запускаю CKeditor 3.4 на довольно простой странице. У меня проблема (иногда), когда я вызываю document.main_form.submit(), она не будет отправлять содержимое текстового поля. После некоторого чтения, похоже, что CKeditor не разрушает должным образом. Я попытался вручную уничтожить его, прежде чем сохранять форму, но не смог ее назвать. Странно, это работает иногда, но не другие. Я нахожусь в Chrome, так что это может быть связано с вещами, но то же самое происходит в Firefox.

Как я могу правильно уничтожить CKeditor, чтобы он всегда отправлял текстовые данные в POST. Спасибо!

4b9b3361

Ответ 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);}}'
)));