
19 mar
Par Clément dans Javascript et Ajax, Tutoriels
Les librairies javascripts sont devenues quasiment incontournable dans le développement d’application interactive sur le web.
Néanmoins, la compatibilité entre elles posent souvent des problèmes lorsqu’on veut les utiliser en même temps.
Le problème réside dans leur utilisation de la méthode $() qui permet de sélectionner un élément avec un sélecteur CSS.
Lorsque deux ou plusieurs framework javascript (Mootools ou Prototype et jQuery)utilisant cette méthode sont sur la même page, on se retrouve avec ce genre d’erreurs :
$ is not a function $(document).ready is not a function
jQuery, qui tente de s’imposer dans ce milieu, possède une méthode qui permet d’utiliser tout les autres frameworks javascript en cohabitation avec lui-même. Cette méthode ce nomme : noConflict();
Voici comment utiliser cette méthode de plusieurs façons :
jQuery.noConflict();
jQuery('#madiv').css('color','red');var J = jQuery.noConflict();
J('#madiv').css('color','red');%MINIFYHTMLc88077b69b88a1b78e0ea02132447deb13%%MINIFYHTMLc88077b69b88a1b78e0ea02132447deb14%%MINIFYHTMLc88077b69b88a1b78e0ea02132447deb15%
Attention, il faut obligatoirement inclure jQuery en dernier dans vos javascripts, sinon la méthode noConflict() n’aura aucun effet.
« La Cheat Sheet de jQuery | Forcer IE8 à interpreter les pages comme IE7 »
Un trackback
13 commentaires
Condutiarii
19 mars 2009 à 22:18
1Raaaah jQuery, j’adore ce framework !
FROLLON
20 mars 2009 à 2:57
2Nikel !!
Je voulai justement utiliser un multi upload JQuerry avec une appli sur mootools
ta assuré vieux
FreeTools
23 mars 2009 à 8:41
3Dès plus intéressant cette info… je me pose juste la question de savoir si cela ne ralenti pas trop l’execution des prog ? Combien de cycle « mange» cette fonction. ? Bref un petit benchmark de la « chose» serait très instructif
Tu me diras, si tu n’utilises que jkQuery, le prob est reglé 
gabi26
24 mars 2009 à 21:27
4Bonjour,
je cherche depuis plusieurs jours et suis content de voir que ces messages sont récents (pour une fois!).J’ai trouvé différentes propositions pour résoudre le conflit avec jQuery.noconflict();
Je débute…alors vous pourriez me dire où je dois inclure ces lignes? (un petit exemple serait le bienvenu (oups))
J’essaie d’utiliser la librairie scriptaculous avec jQuery et ça plante.
Merci d’avance
gtomahawk
31 mars 2009 à 9:39
5@ gabi26 : tu l’inclus dans ton entre 2 balises
Je t’invite a regarder la doc jQuery à ce sujet http://docs.jquery.com/Using_jQuery_with_Other_Libraries
gabi26
7 avril 2009 à 16:24
6Bonjour,
merci gtomahawk. J’avais été sur le lien mais je n’avais pas tout saisi je suppose. Bref j’y arrive. Mon problème à présent est que la page qui contient jQuery est une page php appelée par ajax…j’ai essayé evalScript… mais pour l’instant il refuse de lire le javascript…je cherche donc. Enfin j’ai au moins une moitié de l’épine d’enlevée!
Merci Bonne journée.
gabi26
7 avril 2009 à 17:06
7Bon ben finalement j’ai réussi mais en passant par un lien et non un select et en utilisant prototype avec evalScripts:true, et non la pure requête ajax XMLhttprequest… Reste une ch’tiote d’épine…mais peut-être plus grand chose pour que je trouve.
Merci Dator blog! A plus!
Visual3D
17 avril 2009 à 9:11
8Slt, Merçi pour cette astuce! Néanmoins je me pose des questions sur son implémentation : relation div => css :
Ci-dessous mon index.php :
Mon index contient pas mal de scripts utilisant jquery avec des liens vers des css et des .js associé au scripts et un script basée sur mootools
Illustration :
//script en relation avec element.js :
$(function() {
$(’#container-1′).tabs();
$(’#container-2′).tabs(2);
…
//script en relation avec autre_script.js :
$().ready(function() {
$(’.kwicks’).kwicks({
maxWidth : 205, // required attribute
spacing : 5
});
});
….
…..ainsi de suite pour plusieurs scripts
En dernier on a :
//mon seul script mootools
$(function() {
$(’#test-1′).tabs();
$(’#test-2′).tabs(2);
…
var J = jQuery.noConflict();
J(’#madiv’).css(’color’,'red’);
—————————————————————–
Voici mes questions :
- Dans les divers scripts de mon head au début, je dois changer chaque $ par J pour attribuer le jquery noconflict ?
- Pour l’expression : J(’#madiv’).css(’color’,'red’); => je dois attribuer le nom de la div qui est en relation avec le script ainsi que son theme.css ?
- Et pour le script utilisant mootools je le laisse tel quel avec les $ ?
- En gros, je ne sais pas ce que je dois changer et pour chaque script…
——————————-
Si tu pouvais m’aider ça serait sympa. Mais j’èspere ne pas t’embetter. Dsl pour la longeur du post, je voulais être explicatif.
Bonne journée.
Visual3D
17 avril 2009 à 9:42
9Oups, dsl les balises ne sont pas passées… Tu peut effacer l’ancien post.
Un lien sera plus adapté pour expliquer mon problème :
http://www.developpez.net/forums/d726634/webmasters-developpement-web/javascript/noconflict-jquery-mootools/#post4213543
Merçi pour ton aide…
Visual3d
18 avril 2009 à 21:10
10Bon bah j’ai pu régler le problème en cherchant de mon côté, cela na pas était évident car j’ai bcp de scripts mais tout fonctionne!
Si ça intéresse quelqu’un je mettrai la soluce sur mon futur site. @++
Marakud
27 avril 2009 à 10:45
11bonjour,
qqun a t’il trouvé une solution qui marche pour rendre compatible jquery et les autres libs.svp
Merci
Clément
27 avril 2009 à 11:25
12Tu n’as pas lu l’article ? Tout est expliqué dans celui-ci (en haut de cette page)
Garedo
24 juillet 2009 à 18:09
13Merci pour cette info.
Je vien de réaliser une thème basé sur Iphone et un des utilisateur utilisais du mootools qui faisait planté tout le theme.
problème résolue encore merci
Laisser un commentaire
Devenir Fan de Dator.fr
Nuage de tags
Sponsors
Blogs Amis
Derniers Posts
Derniers Commentaires
Les meilleurs sujets
Propulsé par WordPress