2010-07-11 49 views
0

我有一個頁面,我有一個div,我需要能夠更新幾個不同的代碼段。我在不同的div中使用了onClick事件,它調用一個js函數來加載相應的代碼。如何使用CKEDITOR更新div?

當我第一次打開該頁面,在div只有一個行:

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

而且我用這個函數來獲取屏幕上編輯:

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

(不,我沒有不需要使用某個功能,這是我嘗試解決這個問題的方法之一。)

只要首先使用它,它會很好用。

在將另一組代碼加載到div後出現問題。此時,如果我嘗試再次在編輯器中加載,則會出現「編輯器1」未定義的錯誤。無論是否「editor1」實際上是加載到div中的新代碼的一部分,都會發生錯誤。

在我看來,Javascript並不知道新的「編輯器1」項新的加載後,因此不能做替換。

我需要能夠隨時隨地將任何我需要的例程加載到div中。我需要做什麼來完成這個任務?

謝謝,

肖恩。

+0

你確定加載的HTML不會覆蓋editor1元素?如果是的話就定義了一個新的元素1? – 2010-07-11 00:10:12

回答

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 2010-07-11 10:57:09

+0

@AlfonsoML,的確如此他們在文檔中說,但我從OP描述的猜測是,他正在替換包含編輯器(*和CK *後續的動態代碼),這是什麼原因造成的問題...所以CK的DOM信息應該照顧.. 此外,這是他們在他們的論壇在http ://cksource.com/forums/viewtopic.php?f=11&t=15499 – 2010-07-11 11:54:28

+0

在該論壇主題中,一遍又一遍地講解如何使用.destroy()方法。 使用CKEDITOR.remove不會處理注入頁面的其他元素,如上下文菜單,對話框,並且對編輯器的DOM元素的引用仍將保留在編輯器對象中,並帶有事件偵聽器......如果您想要跟你的客戶發生問題,說明瀏覽器正在吃掉他們的記憶,然後這樣做,或者你可以簡單地調用destroy()方法並忘記這一點。 – AlfonsoML 2010-07-11 13:59:42