2016-06-05 17 views
2

geladen habe ich eine wählen, die eine js funtion auslösen onChange tinymce Editor zum Anzeigen/Verbergen:ausführen js Funktion nach tinymce

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

Dann habe ich eine Textarea mit tinymce (auf Seite Last geladen).

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

Die js Funktion ist wie:

<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 

Alles funktioniert gut, außer für die "$ (document) .ready (function() {myFuntion();});" dass throw ein Fehler "Uncaught TypeError: Kann die Eigenschaft 'show' von null nicht lesen", denke ich, weil tinymce noch nicht geladen ist.

Es gibt einen Weg, um die "Dokument-Ready-Funktion" mit sich ändern "wenn tinymce geladen> execute myFunction()"

PS: Ich benutze tinymce 4, die tinyMCE.init() ist auf einem externe Dateien und auf anderen Seiten verwendet werden, so ziehe ich sich nicht, diese Datei bearbeiten

EDIT: mein eigentliches Problem umgehen, verwenden: setTimeout (function() {myFunction();}, 1500); aber wenn es ein Rückruf oder ähnlich ist, zum Beispiel $ (document) .auf (‚tinymce: init‘) wird

Antwort

0

Nach der docs groß sein, haben Sie den Rückruf zu erklären, wie folgt:

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

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

Dies ist der Griff, den sie bieten, um sicherzustellen, dass tinyMCE bereit ist.
Was Sie sagen hier:

I use tinymce 4, the tinymce.init() is on a external files and used on other page, so i prefer not to edit this file

Hat mir nicht viel Sinn machen.
Nach der Dokumentation:

oninit: This option enables you to specify a function to be executed when all editor instances have finished their initialization. This is much like the onload event of an HTML page.

macht deutlich, reichlich, dass dies der Weg Sie gehen sollten.
Es spielt keine Rolle, wo tinymce.init() deklariert wird, stellen Sie nur sicher, dass Sie die Funktion, die Sie ausführen möchten, hinzugefügt wird.

+0

danke, bereits mit "oninit" versuchen, das Problem ist, dass die tinimce.js (mit der tinymce.init() drin) von vielen Seiten verwendet wird, also wenn ich die "oninit: myfuntion" alle anderen hinzufügen Seiten wirft einen Fehler ... es gibt keinen anderen Weg? – ipel

+0

@ipel Wenn Sie viele Seiten angeben, gehe ich davon aus, dass verschiedene Seiten vom Server gerendert werden (keine einzelne Seite mit unterschiedlichen Routen). Wenn das so ist, würden Sie oninit() auf jeder Seite haben, wo Sie die Tinymce verwenden. Es ist normal, dass Sie das Skript nicht auf eine Seite einfügen und von einer anderen Seite darauf zugreifen können, da die gesamte Seite zurückgesetzt wird, wenn Sie auf eine andere Seite zugreifen. – Trace

2

In tinymce 4 Versuch mit Versprechen

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

zu tun, um die Antwort auf hinzufügen, die Kim Gysen geschrieben ... Sie immer JavaScript verwenden können, um Ihren Standard-Init auf einer Seite für Seite Basis zu ändern/erweitern.

Zum Beispiel mit Standardkonfiguration starten:

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

... da dies nur ein einfaches JavaScript-Objekt ist, können Sie zusätzliche Eigenschaften/Methoden in dieses Objekt injizieren, bevor Sie es verwenden TinyMCE zu initialisieren.

Zum Beispiel:

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

Dann können Sie "injizieren" customConfig in baseConfig. Der einfachste Weg ist jQuery erweitern Methode zu verwenden:

$.extend(baseConfig, customConfig); 

... dies wird alle Methoden und Eigenschaften von customConfig und fügen Sie sie zu baseConfig. Sobald Sie fertig sind, können Sie dann laden TinyMCE mit der neu baseConfig aktualisiert:

tinymce.init(baseConfig); 

Diese allgemeine Technik ermöglicht es Ihnen, ein „Standard“ -Konfiguration mit allen Basisfunktionen müssen Sie zu erstellen, während auf einer Seite zusätzliche Konfigurationsoptionen Injektion von Seitenbasis.

Jetzt können Sie die Funktion "onInit" in TinyMCE auslösen, wenn Sie sie brauchen, ohne die Core-Konfiguration zu ändern, die an anderer Stelle verwendet wird.

Verwandte Themen