2010-07-18 10 views
2

Considérons que j'ai un plugin "fooPlugin" Je le joins à un élément comme $(element).fooPlugin(); Mais plus tard, je veux désactiver le plugin. Comment désactiver le plugin? À l'heure actuelle, je suis en utilisant jwysiwyg plug-injquery désactiver le plugin

Je crée un éditeur avec le plugin jwysiwyg et je dois permettre à l'éditeur quand un bouton est cliqué et retirez l'éditeur quand sur un autre bouton

S'il vous plaît aider!

+0

La question similaire http://stackoverflow.com/questions/1548426/unbind-jquery-plugins –

Répondre

1

Il ne peut pas y avoir de méthode générale pour détacher un plugin, qui sait ce que ce plugin a pu faire aux nœuds, donc seulement ce plugin peut le détacher lui-même.

$(element).fooPlugin() //add 
$(element).removeFooPlugin() //remove 

donc voir jwysiwyg docs ou demandez-leur, dirait qu'ils ont mis en œuvre aucune détruire ou supprimer des méthodes.

0

Je ne pense pas que vous trouverez une technique universelle de "désactivation" qui fonctionne sur tous les plugins. jwysiwyg attache probablement les gestionnaires d'événements à $ (élément) et devrait implémenter sa propre méthode "deactivate". Sinon, vous pouvez ouvrir la source et voir quels sont les gestionnaires qu'elle attache, puis les supprimer à la main.

0

Je n'ai pas regardé le plugin spécifiquement, mais ce que les plugins font habituellement, c'est qu'ils modifient le balisage et y attachent des écouteurs d'événements. Par exemple, un éditeur de contenu peut créer quelques boutons tels que «gras», «italique», etc., puis attacher un événement de clic à chaque bouton. A un clic, il ajoutera [b] ... [/ b] à une zone de texte par exemple qui est également donnée par le balisage défini. Ce que vous pouvez faire pour "désactiver" ce plugin, alors, est de réinitialiser le balisage. Pour ce faire, utilisez d'abord la fonction jquery remove pour supprimer tout le balisage qui a été créé (il aurait dû être placé à l'intérieur d'un conteneur pour que ce soit facile et rapide), puis ajoutez à nouveau le balisage requis depuis le début. Ce balisage ne sera pas affecté par les écouteurs créés précédemment.

0

Comme mentionné par d'autres, il n'y a pas une manière standard de faire cela car le plugin pourrait faire toutes sortes de choses (et tous les plugins sont différents). Vous devrez modifier le plugin.

Je suis venu dans ce même problème et a constaté que cela fonctionne pour les plugins très simples:

donner à l'élément de corps une classe par exemple ".pluginActivated". Editez le plugin de sorte qu'avant de faire quoi que ce soit, il vérifie si le corps a cette classe.

Maintenant, vous pouvez supprimer la classe .pluginActivated du corps et le plugin va cesser de fonctionner sur l'élément.

par exemple. le plug-in peut commencer par

return this.each(function(){ 

Il suffit d'ajouter une fonction if directement au-dessous, avant que le code où le plug-in commence à faire des choses que vous voulez « désactiver »:

if ($("body").hasClass("pluginActivated")){ 

(et souvenez-vous de fermer les accolades avec un} à la fin).Maintenant, cela a d'autres problèmes: le plugin n'est pas vraiment désactivé, il vérifie toujours la classe de corps quand il est déclenché, mais au moins il peut avoir l'effet désiré de ne pas être lié à votre élément spécifié.

Questions connexes