2009-06-04 5 views
6

Je veux mettre un appel de fonction dans mes pages appelées enableTinyMCE(); Dans cette fonction, je veux voir s'il y a des zones de texte dans ma page et si c'est le cas, la fonction tinyMCE.init(). Comment détecter s'il y a des éléments de zone de texte dans la page?Comment trouver/détecter une zone de texte dans une page à l'aide de jQuery?

+0

Pourquoi $ 4 résultat dans ('textarea') de longueur. ? – Jon

+0

Peu importe si vous voulez seulement savoir s'il y en a au moins un. – karim79

+0

ok. si le $ ('textarea'). longueur> 0 je dois inclure le

2

Un sélecteur jQuery retourne toujours un tableau, même si aucun élément correspondant n'a été trouvé. Cela signifie que vous devez vérifier la longueur. Essayez ceci à la place.

if($('textarea').length > 0) {  
document.write('we have at least one textarea'); 
} 
1

je l'ai fait ce qui suit comme suggéré mais je veux encore que d'appeler enableTinyMCE s'il y a textareas dans ma page. Je ne peux pas appeler cette fonction dans document.ready. Voir Google! Des idées?

$(function() { 

    if ($('textarea').length > 0) 
    { 
     var data = $('textarea'); 
     $.each(data, function(i) 
     { 
     tinyMCE.execCommand('mceAddControl', false, data[i].id); 
     } 
     ); 
    } 

}); 

function enableTinyMCE() 
{ 
     tinyMCE.init({ 
      plugins: 'paste', 
      theme_advanced_toolbar_location: 'top', 
      theme_advanced_buttons1: 'pastetext,pasteword,copy,cut,separator,bold,italic,underline,separator,bullist,numlist,separator,undo,redo,separator,link,unlink,separator,charmap,separator,formatselect,separator,code', 
      theme_advanced_buttons2: '', 
      theme_advanced_buttons3: '', 
      mode: 'textareas', 
      theme: 'advanced', 
      theme_advanced_blockformats: 'None=p,Heading 3=h3,Heading 2=h2' 
     }); 
} 

le tinymce.init doit être appelé en dehors de documentready mais longueur $ ('textarea'). Est toujours égale à zéro à l'extérieur de documentready. Aidez-moi!

+0

pourquoi le tinymce doit-il être appelé en dehors de document.ready? le document.ready est de s'assurer que le DOM est enregistré par le navigateur – TStamper

+0

J'ai trouvé ceci - http://www.latenightpc.com/blog/archives/2008/06/09/setting-up-tinymce-with-jquery -and-cakephp-12 mais je le fais dynamiquement donc je ne connais pas l'identifiant des textareas. Et si vous avez plus d'un textarea – Jon

+0

le sélecteur de jquery que vous utilisez ($ ('textarea') ne cherche pas l'id.Il cherche toutes les balises textarea – TStamper

4

Pour développer la réponse de karim79.

À partir du jQuery docs page: Remarque: Il n'est pas toujours nécessaire de tester si un élément existe. Le code suivant afficherait l'élément s'il existe, et ne rien faire (pas d'erreurs) si ce n'est pas le cas.

Ce qui signifie que est que vous pouvez juste faire:

$(function(){ 
    $("textarea").each(function(i){ 
     this.enableTinyMCE(); 
    }) 
}) 

Edit:

Il est en fait un plugin jQuery en cours d'élaboration à cet effet. Je voudrais télécharger et essayer le plugin et contribuer à son développement si vous le pouvez.

jq-tinyMCE

0

C'est ma solution

if ($('textarea').length > 0) 
    { 
     var data = $('textarea'); 
     $.each(data, function(i) 
     { 
     tinyMCE.execCommand('mceAddControl', false, data[i].id); 
     } 
     ); 

     $('form').bind('form-pre-serialize', function(e) { 
      tinyMCE.triggerSave(true,true); 
     }); 
    } 

Et pour permettre tinyMCE Je l'ai fait

<% if (ViewData["TextAreaVisible"] != null && bool.Parse(ViewData["TextAreaVisible"].ToString()) == true) 
    {%> 
     <script type="text/javascript" src="../../Scripts/tinymce/tiny_mce.js"></script> 
     <script type="text/javascript"> 
      enableTinyMCE(); 
     </script> 
<%} %> 

EnableTinyMCE le fait

function enableTinyMCE() { 

    tinyMCE.init({ 
     plugins: 'paste', 
     theme_advanced_toolbar_location: 'top', 
     theme_advanced_buttons1: 'pastetext,pasteword,copy,cut,separator,bold,italic,underline,separator,bullist,numlist,separator,undo,redo,separator,link,unlink,separator,charmap,separator,formatselect,separator,code', 
     theme_advanced_buttons2: '', 
     theme_advanced_buttons3: '', 
     mode: 'none', 
     theme: 'advanced', 
     theme_advanced_blockformats: 'None=p,Heading 3=h3,Heading 2=h2' 
    }); 

}

5

Il convient de noter que la fonctionnalité que vous cherchez peut être manipulé par TinyMCE lui-même:

Si vous définissez le paramètre mode-textareas dans votre tinyMCE.init() appel, il convertit automatiquement les textareas trouve dans les instances de l'éditeur. S'il n'y a pas de zones de texte, ça ne fera rien, tranquillement.

tinyMCE.init({ 
    ... 
    mode : "textareas", 
    ... 
}); 

A l'inverse, vous pouvez dire TinyMCE convertir seulement textareas qui correspondent à un nom de classe CSS en utilisant la valeur specific_textareas au paramètre mode.

tinyMCE.init({ 
    ... 
    mode : "specific_textareas", 
    editor_selector : "mceEditor" 
}); 

http://wiki.moxiecode.com/index.php/TinyMCE:Configuration/mode

Questions connexes