2009-03-31 7 views
5

J'ai une liste d'éléments modifiables via un simple bouton d'édition AJAX/jQuery, qui fonctionne très bien. Mais quand j'essaie d'éditer le même champ une deuxième fois, il ne veut pas jouer à la balle.Impossible de publier deux fois à partir de la même zone de texte AJAX TinyMCE

  1. EDIT - AJAX renvoie un textarea TinyMCE contenu contenant de MySQL
  2. ENREGISTRER - messages AJAX tinyMCE contenu vers MySQL et affiche le contenu affiché
  3. EDIT (nouveau) - Retourne le même tinyMCE textarea et le contenu comme d'habitude
  4. SAVE (nouveau) - La deuxième tentative d'enregistrement est tentée, renvoie une erreur: g.win.document is n ULL

extraits de code

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

Solution - voilà comment je l'ai eu de travail:

EDIT - lors de l'édition, ajoutez le contrôle tinyMCE à le textarea

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

ENREGISTRER - lors de l'enregistrement, retirez le contrôle pour la prochaine fois

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

Salut Peter. Cette solution fonctionne-t-elle toujours pour vous? Je l'ai essayé encore et encore et continuer à obtenir le même problème, peu importe ce que je fais. L'éditeur fonctionne la première fois et est ensuite inéditable la deuxième fois, puis se transforme juste en une zone de textarea après cela. – gurun8

+0

@ grun8 J'ai besoin de voir du code avec lequel vous travaillez, mais souvenez-vous que lorsque cela a été un problème, cela a pris du temps pour le comprendre et le faire fonctionner. Cette solution devrait fonctionner essentiellement, mais selon la façon dont les choses fonctionnent pour vous, il pourrait y avoir d'autres facteurs à considérer. –

Répondre

1

Je suis plus familier avec FCKeditor mais je pense qu'il est similaire. TinyMCE a la commande mceAddControl pour ajouter/créer des instances d'éditeur. Faites-vous cela après avoir rechargé votre contenu?

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

Merci pour la suggestion, toujours faire de la chance. La deuxième fois que le contenu se charge, il est maintenant dans une zone de texte standard pas minusculeMCE: J'ai également essayé de supprimer le contrôle en premier: tinyMCE.execCommand ('mceRemoveControl', false, "content"); tinyMCE.execCommand ("mceAddControl", true, "content"); –

+0

si c'est comme FCKeditor, le navigateur reçoit une zone de texte et puis javascript joue avec le DOM et insère un iframe contenteditable (ou div ou somesuch). Donc, dans les cas où j'ai des formulaires ajax-ed avec les éditeurs, je dois relancer tout le même code qui se passe pendant pageload sur le retour réussi –

2

Je pensais juste que j'ajouter une solution de contournement qui fonctionne en combinaison avec la solution ci-dessus:

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

Pour une raison quelconque, je ne suis pas sûr que ce soit un problème de synchronisation avec la manipulation DOM ou quelque chose d'autre, mais un petit retard rend la vie meilleure. Cependant, le setTimeout() ne fonctionne pas en combinaison avec l'aide d'une méthode jQuery .each(), tels que:

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

Ce doit être un tout autre problème de synchronisation. Anyhoo, pensé que je partagerais ces résultats comme je suis sûr que d'autres et même peut-être moi encore trouveront cette publication utile.

+1

Je voyais le même problème et ne pouvait pas obtenir les correctifs à travailler jusqu'à J'ai présenté le délai d'attente. Je n'aurais jamais pensé à ça. – gfrizzle

+0

Je suis passé au plugin TinyMCE jQuery et le problème a été résolu. Je ne sais pas si c'est une option pour vous ou pas mais c'était la meilleure solution pour mon problème. – gurun8

+0

J'ai eu le même problème, l'ai chassé pendant un jour. Vraiment étrange, cela fonctionnerait toujours la première fois que la page était chargée, jamais lors d'essais ultérieurs. Le délai d'attente fonctionne parfaitement. Merci pour la suggestion. – Bill

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

Pour tinymce 3.2.x, utilisez ce qui suit pour supprimer l'instance tinyMCE dans IE8 ou tout autre navigateur. Comme la fonction tinymce.execCommand rend les champs d'entrée non modifiables dans IE8. Ceci corrigera l'erreur "Permission Denied" sans désactiver d'autres champs d'entrée dans la même page.

Questions connexes