2012-02-01 38 views
1

我有我的網頁上列出了一些領域,每個人都有創建一個文本將被轉換爲TinyMCE的一個按鈕,內容與一個字符串,它是從一個被更新ajax請求。像這樣:tinyMCE的setContent - 動態(jQuery的)添加textarea的

$("table td.bio-td").delegate(".btn", "click", function() { 
    ...   
    var id = this.id; 
    $('#cont').html('<textarea id="mceeditor_'+id'">xyz</textarea>'); 
    tinymce.EditorManager.execCommand('mceAddControl',true, 'mceeditor_'+id); 
    tinymce.activeEditor.setContent(ajax_str); 
    ... 
}); 

該代碼正常工作,除了一件事:setContent()行。 我在javascript控制檯中發現錯誤,activeEditor爲空。不知何故tinyMCE無法在DOM中找到編輯器?那麼之前它是如何轉換爲tinymce對象的呢?

回答

3

嘗試做:

 

tinymce.get('your_textarea_id').focus(); 
tinymce.activeEditor.setContent(ajax_str); 
 

希望它可以幫助

2

最簡單的方法是

tinymce.get('mceeditor_'+id).setContent(ajax_str); 
1

我在同樣的問題絆倒了。我試圖初始化每個選項卡中textarea的tinyMCE實例。我正在使用jquery UI選項卡(jquery ui庫)和我動態創建每個選項卡中,我試圖初始化每個選項卡中textarea的tinyMCE實例。每次你點擊一個按鈕,就會向服務器發出ajax請求以獲取信息,JavaScript處理程序會創建一個包含該信息的新選項卡。

,這似乎是發生的問題是,在回調時,服務器返回與您的回調處理程序的響應,如果你做下面的調用在同一線程

tinyMCE.execCommand("mceAddControl",false, "my_element" + elementid); 
tinyMCE.get("my_element" + elementid).setContent("hello world!"); 

的「tinyMCE.get (..)「將返回null。

看來,您只是添加新的MCE控制整理劑被創建一次回調處理函數已經完全執行完畢。

因此,你需要調用這個:

tinyMCE.get("my_element" + elementid).setContent("hello world!"); 

別的地方,後來(由事件觸發後)。

更新(編輯):

所以我告訴你,這一切都沒有真正測試它。 但最後我有,我確認這是發生了什麼事。 我做了一個不那麼漂亮,砍,我用一個定時器觸發100毫秒之後,如:

tinyMCEHack_timer = setTimeout("finish_setting_mce_content()",100); 

理想情況下,你會想找到比這更好的事件。

你還必須找到一種方法,從您的AJAX回調處理程序將數據傳遞到你的計時器回調處理程序。再次,這不是很漂亮,但我使用了一個全局變量(範圍是整個頁面的變量)。

祝你好運!

2

我有同樣的問題。

移動tinymce.init到頁面的結束。

使用$('#terms').val('ssssss')來更新關於ajax成功的textarea

一旦更新textarea,它將被轉換爲編輯器。