2009-03-31 7 views
5

Ho una lista di elementi modificabili tramite un semplice pulsante di modifica AJAX/jQuery, che funziona alla grande. Ma quando provo a modificare lo stesso campo una seconda volta, non voglio giocare a palla.Impossibile pubblicare due volte dalla stessa AJAX TinyMCE textarea

  1. EDIT - AJAX restituisce una textarea TinyMCE contenente il contenuto da MySQL
  2. SAVE - messaggi AJAX TinyMCE contenuti a MySQL e visualizza contenuti pubblicati
  3. EDIT (di nuovo) - restituisce lo stesso TinyMCE textarea e contenuto come al solito
  4. SALVA (di nuovo) - Viene tentata la seconda volta, errore di restituzione: g.win.document is n ull

frammenti di codice

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

Soluzione - è così che ho capito di lavoro:

EDIT - durante la modifica, aggiungere il controllo TinyMCE a la textarea

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

SAVE - durante il salvataggio, rimuovere il controllo per la prossima volta

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

Ehi Peter. Questa soluzione funziona ancora per te? L'ho provato più e più volte e continuo a ottenere lo stesso problema, non importa quello che faccio. L'editor funziona per la prima volta e quindi non è modificabile la seconda volta e poi si trasforma in una casella textarea. – gurun8

+0

@ grun8 Avrei bisogno di vedere un codice con cui stai lavorando, ma ricorda quando questo era un problema che ci sono voluti anni per capirlo e farlo funzionare. Questa soluzione dovrebbe funzionare in sostanza, ma a seconda di come funzionano le cose per voi, potrebbero esserci altri fattori da considerare. –

risposta

1

io sono più familiarità con FCKeditor, ma penso che sia simile. TinyMCE ha il comando mceAddControl per aggiungere/creare istanze di editor. Lo stai facendo dopo aver ricaricato il tuo contenuto?

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

Grazie per il suggerimento, ancora fortuna. La seconda volta che carica il contenuto è ora in una textarea standard non piccolaMCE: Ho anche provato a rimuovere prima il controllo: tinyMCE.execCommand ('mceRemoveControl', false, "content"); tinyMCE.execCommand ("mceAddControl", true, "content"); –

+0

se è come FCKeditor, il browser riceve una textarea e poi alcuni javascript suona con il DOM e inserisce un iframe contenteditable (o div o somesuch). Quindi, nei casi in cui ho moduli ajaxed con editor, ho bisogno di rieseguire lo stesso codice che accade durante il pageload con esito positivo –

2

Ho pensato di aggiungere una soluzione soluzione che funziona in combinazione con la soluzione di cui sopra:

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

Per una qualche ragione, non sono sicuro se si tratta di un problema di temporizzazione con la manipolazione del DOM o qualcos'altro, ma un piccolo ritardo rende la vita migliore. Tuttavia il setTimeout() non ha funzionato in combinazione con l'utilizzo di un metodo di jQuery .each(), come ad esempio:

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

Questo deve essere un bel problema di temporizzazione diversa.

Anyhoo, ho pensato di condividere questi risultati perché sono sicuro che gli altri e forse anche me di nuovo troveranno utile questo post.

+1

Stavo vedendo lo stesso problema e non riuscivo a far funzionare le correzioni fino a Ho introdotto il timeout. Non ci avrei mai pensato. – gfrizzle

+0

Sono passato al plugin jQuery di TinyMCE e il problema si è risolto da solo. Non sono sicuro che questa sia un'opzione per te o meno, ma quella era la soluzione migliore per il mio problema. – gurun8

+0

Ho avuto lo stesso problema, l'ho inseguito per un giorno. Davvero strano, funzionerebbe sempre la prima volta che la pagina è stata caricata, mai nei successivi tentativi. Il timeout funziona perfettamente. Grazie per il suggerimento. – Bill

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

Per tinymce 3.2.x, utilizzare quanto segue per rimuovere l'istanza tinyMCE in IE8 o qualsiasi altro browser. Poiché la funzione tinymce.execCommand rende i campi di input non modificabili in IE8.

tinyMCE.remove(editor); //editor is instance of tinymce editor and not editor id 

Questo corregge l'errore "Autorizzazione negata" senza disattivare altri campi di input nella stessa pagina.

Problemi correlati