簡體   English   中英

加載tinymce后執行js函數

[英]execute js function after tinymce is loaded

我有一個選擇onchange觸發一個js功能來顯示/隱藏tinymce編輯器:

<select id="mySelect" onChange="myFuntion()">
<option value="1">Yes</option>
<option value="0">No</option>

然后我有一個帶有tinymce的textarea(在頁面加載時加載)。

<textarea class="mce" id="myTextarea"></textarea>
<script src="tinymce.js></script> // file with global tinymce.init({ ... });

js函數如下:

<script>    
function myFuntion(){ 
  if( $( '#mySelect' ).val() == '1' ) { tinymce.get( 'myTextarea' ).show(); } 
  else { tinymce.get( 'myTextarea' ).hide(); }
}
$( document ).ready(function() { myFuntion(); }); // show/hide tinymce based on how the mySelect setting is on page load

一切都很好,除了“ $(document).ready(function(){myFuntion();}); ”拋出錯誤“ Uncaught TypeError:無法讀取屬性' show'of null ”,我認為因為tinymce是尚未加載。

有一種方法可以改變“文件就緒功能”,“當加載tinymce時>執行myFunction()”

PS:我使用tinymce 4,tinymce.init()在外部文件上並在其他頁面上使用,所以我不想編輯這個文件

編輯:我的實際解決方法是使用:setTimeout(function(){myFunction();},1500); 但如果有回調或類似,例如$(document).on('tinymce:init')會很棒

在tinymce 4嘗試使用Promise

tinymce.init({
//some settings
}).then(function(editors) {
   //what to do after editors init
});

要添加Kim Gysen寫的答案......您可以始終使用JavaScript來逐頁修改/擴展標准init。

例如,從標准配置開始:

baseConfig = {
    selector: 'textarea'
    ....
}

...因為這只是一個簡單的JavaScript對象,您可以在使用它來初始化TinyMCE之前將其他屬性/方法注入該對象。

例如:

 customConfig = {
    setup: function (editor) {
        editor.on('init', function () {
            //Do what you need to do once TinyMCE is initialized
        });
    }
}

然后你可以將customConfig “注入” baseConfig 最簡單的方法是使用jQuery的extend方法:

$.extend(baseConfig, customConfig);

...這將獲取customConfig所有方法和屬性,並將它們添加到baseConfig 完成后,您可以使用新更新的baseConfig加載TinyMCE:

tinymce.init(baseConfig);

這種通用技術允許您創建“標准”配置,其中包含所需的所有基本功能,同時逐頁注入其他配置選項。

因此,現在您可以在需要時觸發TinyMCE中的“onInit”功能,而無需修改其他地方使用的核心配置。

根據文檔,您必須聲明回調如下:

function myCustomOnInit() {
        alert("We are ready to rumble!!");
}

tinyMCE.init({
        ...
        oninit : myCustomOnInit
});

這是他們提供的手柄,以確保tinyMCE准備就緒。
你在這說什么:

我使用tinymce 4,tinymce.init()在外部文件上,並在其他頁面上使用,所以我不想編輯這個文件

對我來說沒有多大意義。
根據文件:

oninit:此選項使您可以指定在所有編輯器實例完成初始化時要執行的函數。 這很像HTML頁面的onload事件。

非常清楚這是你應該去的方式。
聲明tinymce.init()位置tinymce.init() ,只需確保添加要執行的函數即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM