159 votes

Les infobulles de jQueryUI sont en concurrence avec Twitter Bootstrap

J'ai réussi à faire fonctionner certains conseils d'outils. enfin avec le code suivant :

<a href="#" rel="tooltip" title="Tool tip text here">Hover over me</a>

et ensuite

<script>
    $('[rel=tooltip]').tooltip();
</script>

Le problème que je rencontre est qu'il utilise les infobulles de jQueryUI (pas de flèches, de grosses infobulles laides) au lieu de Bootstraps.

Que dois-je faire pour utiliser les infobulles de Bootstrap au lieu de jQueryUI ?

0 votes

Faut-il avoir les deux ?

0 votes

Non... J'aimerais juste avoir les infobulles de Bootstrap.

0 votes

Désolé, je voulais dire qu'il faut avoir jquery ui ET bootstrap ?

204voto

The Demz Points 1010

JQuery UI et Bootstrap utilisent tous deux tooltip pour le nom du plugin. Utilisez $.widget.bridge pour créer un nom différent pour la version jQuery UI et permettre au plugin Bootstrap de conserver le nom tooltip (en essayant d'utiliser la balise noConflict sur le widget Bootstrap entraîne de nombreuses erreurs car il ne fonctionne pas correctement ; ce problème a été signalé ici ):

// Resolve name collision between jQuery UI and Twitter Bootstrap
$.widget.bridge('uitooltip', $.ui.tooltip);

Donc le code pour le faire fonctionner :

// Import jQuery UI first
<script src="/js/jquery-ui.js"></script>
// Resolve name collision between jQuery UI and Twitter Bootstrap
$.widget.bridge('uitooltip', $.ui.tooltip);
// Then import bootstrap
<script src="js/bootstrap.js"></script>

Beau code copier-coller qui gère aussi le conflit de boutons :

<script type="application/javascript" src="/js/jquery.js"></script>
<script type="application/javascript" src="/js/jquery-ui.js"></script>
<script>
/*** Handle jQuery plugin naming conflict between jQuery UI and Bootstrap ***/
$.widget.bridge('uibutton', $.ui.button);
$.widget.bridge('uitooltip', $.ui.tooltip);
</script>
<script type="application/javascript" src="/js/bootstrap.js"></script>

1 votes

J'obtiens une erreur de js quand j'essaie ceci. 'undefined' is not an object (evaluating '$.widget.bridge')

2 votes

Covar - vous êtes-vous assuré que vous avez importé tous les scripts src ? Et utilisez-vous les versions les plus récentes des librairies ?

1 votes

@covard : Il est important que vous importiez d'abord jquery-ui, puis que vous fassiez l'opération suivante bridge et ensuite importer bootstrap.

78voto

Stefan Musarra Points 26

Une solution simple consiste à charger bootrap.js après jquery-ui.js, afin que la méthode bootstrap .tooltip soit prioritaire.

2 votes

Cela a fonctionné pour moi et c'est le moyen le plus simple. Je recommande d'ajouter un commentaire HTML indiquant qu'une bibliothèque doit être chargée après l'autre.

4 votes

Un jour, vous manquerez l'icône de fermeture dans les boîtes de dialogue en utilisant cette approche. stackoverflow.com/questions/17367736/

0 votes

Cette solution n'a pas fonctionné pour moi. En utilisant Chrome, j'ai pu "vider le cache et rafraîchir la page" et l'infobulle fonctionnait parfois, parfois non (aucune erreur dans le fichier console.log). En actualisant la page 30 fois, je n'ai obtenu des résultats satisfaisants que 7 fois. J'ai ensuite téléchargé un paquet personnalisé de jQuery UI et maintenant, lorsque je "vide le cache et rafraîchis la page" 30 fois, j'obtiens des résultats fonctionnels 30 fois, sans aucune erreur. J'aimerais également ajouter que j'utilise require.js pour pouvoir facilement contrôler l'ordre dans lequel les bibliothèques sont chargées.

33voto

Poncho Points 88

Cela a marché pour moi :

Si vous avez besoin d'utiliser JQuery-UI mais que vous souhaitez utiliser l'infobulle de Bootstrap, il vous suffit d'obtenir une version personnalisée de JQuery-UI à partir de ce qui suit site web .

Il suffit de décocher l'option "Tooltip", et de le télécharger (ce sera quelque chose comme "jquery-ui-1.10.4.custom.js").

Il suffit de l'ajouter à votre projet à la place de la version que vous utilisez actuellement et vous êtes prêt à faire la fête. Cela évitera le conflit. Cela a marché comme un charme pour moi !

1 votes

Donc vous téléchargez toujours les fichiers d'actifs de chaque côté à la main au lieu d'utiliser un outil comme bower ? Comment installez-vous les bibliothèques tierces en général ? En cherchant dans Google et en les téléchargeant depuis n'importe quel site ?

0 votes

Je ne veux pas utiliser l'infobulle du bootstrap mais celle de l'interface utilisateur. Ce sont elles qui causent le problème de toute façon.

2 votes

C'est simple, facile et cela a bien fonctionné dans ma situation. Merci ! +1

11voto

Michael Chaney Points 52

Pourquoi ne pas utiliser les popovers de Bootstrap à la place ? Les popovers BS ne créent pas le même conflit bien qu'ils nécessitent le même composant tooltip.js. Oui, ils sont plus stylisés, mais ils ne rendent pas mes boutons JQuery UI inutilisables.

J'utilise Jquery UI uniquement pour les boîtes à coques/combinaisons personnalisées (je ne peux donc pas prétendre que les autres contrôles JQ-UI sont corrects) et aucune des solutions ci-dessus n'a fonctionné pour résoudre le problème CSS des boutons de la boîte à coques qui deviennent "non stylisés" lorsqu'on invoque BS Tooltips. Le passage à BS Popovers a fourni essentiellement le même effet sans conflits, sans réordonner mes importations script, et sans avoir besoin de déclarations de pont explicites.

3 votes

Comme ça, très pragmatique

0 votes

Merci pour le conseil, je suis d'accord, c'est une solution de contournement qui évite toute complexité.

0 votes

Ja man, dis one résout tous les cauchemars et ressemble à un citron !

10voto

Jon Stevens Points 1087

Cette solution semble bien fonctionner pour moi.

// handle jQuery plugin naming conflict between jQuery UI and Bootstrap
$.widget.bridge('uibutton', $.ui.button);
$.widget.bridge('uitooltip', $.ui.tooltip);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X