2012-04-05 4 views
5

Pracuję więc nad witryną, która używa zarówno jQuery, jak i prototype.js, jednak ich konflikt.

mam zbadane w porządku trochę i okazało się, że jedynym sposobem ludzie rozwiązać ten problem jest użycie

<script> 
jQuery.noConflict(); 

// Use jQuery via jQuery(...) 
jQuery(document).ready(function(){ 
    jQuery(\"div\").hide(); 
}); 

// Use Prototype with $(...), etc. 
$('someid').hide(); 

Jednakże nie chcę zmienić $ jQuery jak to oznacza, że "Musimy edytować sporo wcześniej napisanego kodu. Czy istnieje sposób, aby zatrzymać je w konflikcie i pozostawić jQuery jako $?

+0

Pytasz czy można mieć w tym samym zakresie, $ oznaczać dwie różne rzeczy? – Iznogood

+0

Pyta, czy istnieje prototypowa wersja 'noConflict()'. –

+0

możliwe duplikat [jQuery i Prototype Conflict] (http://stackoverflow.com/questions/134572/jquery-prototype-conflict) – jrummell

Odpowiedz

9

Zamiast dokumentu gotowy można utworzyć zamknięcie (na koniec body), takie jak:

(function($) { 
    //jQuery stuff 
    $('.elem') // $ refers to jQuery 
})(jQuery); 

Jeśli dobrze rozumiem

+0

Och, ktoś już opublikował tę samą odpowiedź. – rgin

+0

Zdecydowałem się przejść z tym, jednak denerwująco prototype.js pokazuje błąd teraz .. –

+0

O, idziemy, naprawiliśmy, dziękujemy, że wszyscy pomogli! –

6

Nie, nie o tym słyszałem. Aby zminimalizować ból kodu konwersji można zrobić coś w tym jednak:

var j$ = jQuery.noConflict(); 

Następnie można zastąpić jQuery $ połączeń z j$. Prawdopodobnie możesz użyć zwykłego połączenia typu znajdź/zamień.

+0

Myślę, że to spowodowało problem z globalną i lokalną zmienną, więc zdecydowałem się przejść z jednym wyżej, dzięki! –

2
(function($){ 
    // $('jquery here') 
})(jQuery); 

pytanie cały kod jquery wewnątrz funkcji można użyć $.

0

Istnieje prosty sposób to zrobić poprzez owinięcie swoją allready napisany kod do funkcji i przekazać jQuery do niego. W ten sposób możesz zachować swój już napisany kod i używać jQuery jako identyfikatora tylko dla nowego:

(my_old_stuff = function($){ 
    $.my_existing_function(){ 
     alert('i allready exist'); 
    }; 
)(jQuery); 

jQuery.my_existing_function(); 

To powinno zadziałać.

Z drugiej strony: zastąpienie $ z jQuery nie wydaje się być to, że wiele z zadań dla automatycznej wymiany.

0

Chociaż jest to dość stary post, ale miałem dokładnie taki sam problem. Dostępnych jest wiele opcji do obsługi. Nie dotknęłbym wcześniej napisanego kodu i pozwoliłbym, aby prototypowy js użył $.

Z jQuery documentation

<!-- Loading jQuery before other libraries. --> 
<script src="jquery.js"></script> 
<script src="prototype.js"></script> 
<script> 

// Use full jQuery function name to reference jQuery. 
jQuery(document).ready(function() { 
    jQuery("div").hide(); 
}); 

// Use the $ variable as defined in prototype.js 
window.onload = function() { 
    var mainDiv = $("main"); 
}; 

</script> 

Oto lista dostępnych opcji.

https://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/

Powiązane problemy