2010-08-31 477 views
19

我在一個非常簡單的頁面上運行CKeditor 3.4。我有一個問題(有時),當我調用document.main_form.submit()時,它不會沿着textarea的內容發送。經過一番閱讀,聽起來CKeditor沒有正常銷燬。我在保存表單之前嘗試手動銷燬它,但無法調用它。奇怪的是,它有時會起作用,但不是其他的。我使用的是Chrome,所以這可能會讓事情變得糟糕,但Firefox中也會出現同樣的情況。如何正確銷燬CKEditor實例?

如何正確銷燬CKeditor,以便始終在POST中發送textarea數據。謝謝!

回答

30

我有這個問題。多麼痛苦。

要正確銷燬編輯器實例,嘗試

if (CKEDITOR.instances.myInstanceName) CKEDITOR.instances.myInstanceName.destroy(); 

從文檔here

我通過分配編輯器的內容回發之前的隱藏字段解決遺漏的內容問題。我使用ASP.Net,但它應該普遍工作。

在提交按鈕的客戶端點擊處理

,叫

if (CKEDITOR.instances.myInstanceName) 
    document.getElementById('hiddenField').value = CKEDITOR.instances.getData(); 
+1

創建的所有實例我怎麼知道什麼「myInstanceName '是?這是編輯器的ID嗎? – rmcsharry 2017-10-13 11:40:41

5

在我的情況

CKEDITOR.instances.myInstanceName.destroy(); 

沒有幫助,因爲我已經打開的CKEditor在jquery dialog上雙擊在某個項目上。當我關閉編輯器並再次打開它們時,我的代碼崩潰了。
溶液使用

CKEDITOR.instances.myInstanceName.destroy(false); 

其中更新DOM元素(link to documentation)。

+1

我們也在jQuery對話框中打開我們的CKEditor。我們使用的是'CKEDITOR.instances.myInstanceName.destroy(true);'這也導致我們的代碼由於錯誤「TypeError:a爲null」而崩潰。但是,切換到「假」並不能解決我們的問題。不得不把這行代碼放在try/catch – jgerman 2014-07-01 18:31:53

11

我曾經爲每個子視圖使用帶有一個CKEDITOR實例的angularjs ui-router。我用以下解決方案來清除實例每次我打開用戶界面視圖

for(name in CKEDITOR.instances) 
{ 
    CKEDITOR.instances[name].destroy() 
} 
+0

for..in require IE10 .. – Brunis 2016-02-10 14:31:41

+0

這是一個更好的解決方案。在我的情況下,每次用戶訪問編輯器加載的路徑時,實例名稱都會從編輯器1更改爲編輯器2等。由於我無法輕鬆預測實例名稱,因此循環遍歷它們就像這樣工作。謝謝! – rmcsharry 2017-10-13 11:50:37

-2
$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);}}' 
))); 
3

使用這種簡單的code.Note我的文字區域ID editor1
或者您也可以與console.log(CKEDITOR.instances.editor1);

if (CKEDITOR.instances.editor1) { 
    CKEDITOR.instances.editor1.destroy(); 
} 
-1

的解決方案,終於做的工作檢查。

問題是如果你銷燬一個ckeditor,然後嘗試替換一個不起作用的textarea。

我發現了這個簡單的例子,給了我線索。使用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'); 
    } 
} 
1

for(name in CKEDITOR.instances){ CKEDITOR.instances[name].destroy() }

使用的代碼,以摧毀的CKEditor