2009-03-31 7 views
5

Ich habe eine Liste von Elementen bearbeitet über eine einfache AJAX/jQuery Bearbeitungsschaltfläche, die gut funktioniert. Aber wenn ich versuche, das gleiche Feld ein zweites Mal zu bearbeiten, will es keinen Ball spielen.Kann nicht zweimal aus dem gleichen AJAX TinyMCE Textbereich senden

  1. EDIT - AJAX gibt einen tinyMCE TextArea- enthält Inhalte von MySQL
  2. SPAREN - AJAX Beiträge tinyMCE Inhalte zu MySQL und zeigt veröffentlichten Inhalte
  3. EDIT (wieder) - Liefert die gleiche tinyMCE Textbereich und Inhalt wie gewohnt
  4. sAVE (wieder) - Das zweite Mal speichern versucht wird, gibt Fehler: g.win.document n ull

Code-Schnipsel

var content = tinyMCE.get('content').getContent(); //get tinyMCE content 
$("#edititem").load("editItem.php", {content: content}); //jQuery post 

Lösung - das ist, wie ich habe es funktioniert:

EDIT - bei der Bearbeitung, fügen Sie die tinyMCE Kontrolle das Textfeld

tinyMCE.execCommand("mceAddControl",true,'content'); 

SAVE- - beim Speichern, entfernen Sie die Steuerung für die nächste Zeit

tinyMCE.execCommand('mceRemoveControl',false,'content'); 
+0

Hey Peter. Funktioniert diese Lösung noch für Sie? Ich habe es immer wieder ausprobiert und bekomme immer das gleiche Problem, egal was ich mache. Der Editor arbeitet das erste Mal und ist dann beim zweiten Mal nicht mehr editierbar und wird danach einfach in eine Textfelder-Box umgewandelt. – gurun8

+0

@ grun8 Ich müsste Code sehen, mit dem Sie arbeiten, aber denken Sie daran, wenn es ein Problem war, dauerte es ewig, um es herauszufinden und es zum Laufen zu bringen. Diese Lösung sollte im Wesentlichen funktionieren, aber abhängig davon, wie die Dinge für Sie arbeiten, könnten andere Faktoren in Betracht gezogen werden. –

Antwort

1

Ich bin mehr vertraut mit FCKeditor, aber ich denke, dass es ähnlich ist. TinyMCE hat den Befehl mceAddControl zum Hinzufügen/Erstellen von Editorinstanzen. Machst du das, nachdem du deinen Inhalt neu geladen hast?

tinyMCE.execCommand('mceAddControl' ... 
+0

Danke für den Vorschlag, immer noch Glück. Das zweite Mal, wenn der Inhalt geladen wird, ist es jetzt in einem Standard-Textfeld nicht tinyMCE: Ich habe auch versucht, das Steuerelement zuerst zu entfernen: tinyMCE.execCommand ('mceRemoveControl', false, "Inhalt"); tinyMCE.execCommand ("mceAddControl", true, "Inhalt"); –

+0

Wenn es wie FCKeditor ist, erhält der Browser eine Textarea, und dann spielt ein paar Javascript mit dem DOM und fügt einen contenteditable iframe (oder div oder somesuch) ein. In den Fällen, in denen ich Formulare mit Editoren ajaxed habe, muss ich den gleichen Code erneut ausführen, der während des Pageloads bei erfolgreicher Rückgabe passiert. –

2

dachte, ich würde eine Umgehungslösung hinzufügen, die mit der Lösung oben in Kombination funktioniert:

setTimeout(function() {tinyMCE.execCommand("mceAddControl", true, "content");}, 5); 

Aus irgendeinem Grund, ich bin nicht sicher, ob es sich um ein Timing-Problem mit der DOM-Manipulation ist oder etwas anderes, aber eine winzige Verzögerung macht das Leben besser. Allerdings hatte die setTimeout() NICHT Kombination arbeitete mit einer jQuery .each() Methode verwenden, wie zum Beispiel:

$("textarea").each(function(index) { 
    tinyMCE.execCommand("mceAddControl", false, $(this).attr("id")); 
}); 

Das ist ein ganz anderes Zeitproblem sein muß.

Anyhoo, dachte, ich würde diese Ergebnisse teilen, da ich sicher bin, dass andere und vielleicht auch ich wieder diesen Beitrag hilfreich finden.

+1

Ich sah das gleiche Problem und konnte keine der Fixes bis dahin erhalten Ich habe die Zeitüberschreitung eingeführt. Hätte nie daran gedacht. – gfrizzle

+0

Ich wechselte zum TinyMCE jQuery Plugin und das Problem löste sich selbst. Nicht sicher, ob dies eine Option für Sie ist oder nicht, aber das war die beste Lösung für mein Problem. – gurun8

+0

Ich hatte das gleiche Problem, jagte es für einen Tag. Wirklich seltsam, es würde immer funktionieren, wenn die Seite zum ersten Mal geladen wurde, niemals bei nachfolgenden Versuchen. Die Zeitüberschreitung funktioniert einwandfrei. Danke für den Vorschlag. – Bill

2
$(tinyMCE.editors).each(function(){ 
          tinyMCE.remove(this); 
         }); 
0

Verwenden Sie für tinymce 3.2.x Folgendes, um die tinyMCE-Instanz in IE8 oder einem anderen Browser zu entfernen. Die Funktion ynymce.execCommand macht Eingabefelder in IE8 nicht editierbar.

Dies wird Fehler "Berechtigung verweigert" beheben, ohne andere Eingabefelder auf der gleichen Seite zu deaktivieren.

Verwandte Themen