6
votes

Deux versions différentes de jQuery dans la même page HTML

J'ai un document HTML où j'ai référencé jQuery version 1.2.2 dans l'en-tête pour une boîte épaisse et j'ai ensuite référencé JQuery 1.7.1 juste avant la balise Etiquette qui est pour un Picture Diaporama.

Le problème est que la boîte épaisse ne fonctionnera pas à moins que la référence pour JQuery 1.7.1 soit supprimée, qui arrête ensuite le diaporama de travail.

J'ai googlé sur le point de savoir sur $ conflit mais aucune des solutions suggérées n'a travaillé.

Le plus courant que j'ai vu et j'ai essayé est: var $ j = jquery.noconflic ();

Comment puis-je résoudre ce problème?


3 commentaires

Je suggérerais de tout migrer à la version la plus récente.


Pourriez-vous fournir le code s'il vous plaît?


Ceci est un duplicata de Stackoverflow.com/Questtions/528241/...


5 Réponses :


2
votes

si strong> em> les plug-ins sont bien élevés, cela devrait alors fonctionner: xxx pré>

(évidemment, ces noms de script sont faits up.) Voici un exemple ( source ) (j'ai utilisé JQuery 1.4.2 et JQuery 1.7.1 parce que Google n'accueille pas 1.2.2). P>

Ce qui fonctionne avec bien -Les plug-ins perhés parce qu'un plug-in bien élevé ne s'appuie pas sur le global $ code> du tout, mais utilise plutôt la valeur du jQuery code> global À partir de quand il a été chargé EM> et saisit une référence à une fermeture, utilise ensuite cette référence locale dans tout le code du plug-in, comme celui-ci: p> xxx pré>

ou p> xxx pré>

deux de ceux-ci saisissent le global jQuery code> comme du moment où le plug-in est chargé em> puis utilisez leur alias local partout. p>

Si le plug-in veut attendre l'événement prêt, il peut également faire cela: P>

jQuery(function($) {
    // ...Plug-in code using `$` here -- note it's a *local* `$`,
    // not the global `$`, and not the global `jQuery`...
});


2 commentaires

La plupart des plugins utilisent des rappels qui seront exécutés plus tard. S'il y a une dépendance avec une version spécifique de JQuery, le problème n'aurait-il pas lieu à ce moment-là?


@Dystroy: pas si elles sont écrites correctement, non.



0
votes

Je ne conseillerais pas d'utiliser deux versions différentes de JQuery. Il y a d'autres alternatives à une boîte épaisse qui fonctionne parfaitement avec la dernière jQuery.


0 commentaires

2
votes
<script src="http://code.jquery.com/jquery-1.2.2.min.js"></script>
<script type="text/javascript">
  var jQ122 = jQuery.noConflict();
</script>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
  var jQ171 = jQuery.noConflict();


  (function($) { 
    $(function() {
      // here $ is jQuery 1.2.2
    });
  })(jQ122);


  (function($) { 
    $(function() {
      // here $ is jQuery 1.7.1
    });
  })(jQ171);
</script>

2 commentaires

Ça marcherait. Veillez simplement à ce que les bibliothèques JavaScript puissent polluer l'espace de nom (indice: toute la bibliothèque doit être enveloppée par (fonction () ...) (jQuery) comme indiqué dans votre code. Vous devrez peut-être spécifier jQuery = JQ171 pour les supporter. En outre, TYPE = "TEXT / JAVASCRIPT" n'est pas nécessaire. Tous les navigateurs sont par défaut à JavaScript, comme ils le devraient.


Sauf si les bibliothèques que l'OP utilise, faites ceci (ou l'OP les édite de le faire), cela n'aide pas. Il montre une façon d'avoir accès à deux versions différentes de JQuery sur une page, mais ...



0
votes

Ce que vous voulez faire est une pratique extrêmement mauvaise (vous devriez en effet migrer tout le code vers la même version), mais il peut être théoriquement effectué ...

Vous auriez besoin d'apporter des modifications aux plug-ins respectifs de toute façon Tho. .. Considérons ce code: p> xxx pré>

Vous modifiez alors le code de vos plugins au point où JQuery est remis au plugin, ce qui ressemblerait à ce problème: P>

(function( $ ){
     // all your plugins code would be here
})( jQuery );     // replace "jQuery" with one of your respective jQuery14/jQuery17 versions/variables


0 commentaires

0
votes

Bien que vous puissiez utiliser jquery.noconflic (); pour déclarer des versions séparées de JQuery en même temps.

J'ai souvent eu des problèmes avec IE8 avec certaines bibliothèques quand je le fais .

Donc, une solution alternative serait d'utiliser une iframe pour charger une page dans votre page actuelle.

avoir une version donnée de jQuery sur une page, et une autre sur la seconde .

Par exemple: xxx


0 commentaires