Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Konflikt biblioteki jQuery z byslidemenu-2.1.3.js ...
Forum PHP.pl > Forum > Przedszkole
Elber
Witam, mam problem...mam slider w jQuery który działa ok i menu (byslidemenu) po lewej które działa tylko w momencie gdy załaduje w <script> biblioteki jQuery a jak jej nie załaduje to nie działa slider ... jak rozwiązać ten konflikt ? Tutaj link http://www.techos.pl/smolin/oferta.html

Konsola błędów pokazuje:
Uncaught TypeError: Object [object Object] has no method 'getElements' w http://www.techos.pl/smolin/js/byslidemenu-2.1.3.js w 37 linii


Cytat
33: initialize: function(options) {
34: this.setOptions(options);
35:
36: var menu = $(this.options.container);
37: this.elements = menu.getElements(this.options.selector);
38: var elements_count = this.elements.length;
Necsord
Troche lektury: http://api.jquery.com/jQuery.noConflict/
  1. <script type="text/javascript">
  2. var j = jQuery.noConflict();
  3. j(document).ready(function(){
  4. j('.slider').carousel({});
  5. });
  6. </script>


Drugim problemem u ciebie jest to, że w js/byslidemenu_demo.js masz:

  1. window.addEvent('load', function(){
  2.  
  3. /* Using skip class */
  4. new BySlideMenu({
  5. 'container' : 'byslidemenu_skip',
  6. 'vertical' : true,
  7. 'compressSize' : 20,
  8. 'defaultClass' : 'default'
  9. });
  10. });


Obiekt o id "byslidemenu_skip" nie istnieje, z tego co się domyślam chciałeś tam wstawić "category", czyli podmień "byslidemenu_skip" na "category".
Elber
Czytałem o jQuery.noConflict i próbowałem wstawić ale robiłem to źle ... wstawiłem ale teraz wywala error do linijki 36:

Property '$' of object [object DOMWindow] is not a function

36: var menu = $(this.options.container);

Aj źle wstawiłem...teraz wstawiłem dobrze tak jak podałeś:

<script type="text/javascript">
var j = jQuery.noConflict();
j(document).ready(function(){
j('.slider').carousel({});
});
</script>

ale nie działa slider, za to menu działa smile.gif
Necsord
jQuery ma teraz zajęty namespace "j" czyli poprawnie jest:
  1. j(function(){
  2. j('.slider li').each(function() {
  3. var $t = j(this);
  4. var boxik1Width = $t.find('.boxik:eq(0)').width();
  5. var boxik2Width = $t.find('.boxik:eq(1)').width();
  6. var singleMargin = parseInt((900 - boxik1Width - boxik2Width) / 4);
  7. $t.find('.boxik').css('margin','0 '+singleMargin+'px');
  8. });
  9. });


w skrypcie od slider'a. ( Zamiast "$", "j". ) Jako ciekawostke zamiast zamiany wszystkich miejsc z $ na j można zrobić coś takiego:

  1. (function($){
  2. $('.slider li').each(function() {
  3. var $t = $(this);
  4. var boxik1Width = $t.find('.boxik:eq(0)').width();
  5. var boxik2Width = $t.find('.boxik:eq(1)').width();
  6. var singleMargin = parseInt((900 - boxik1Width - boxik2Width) / 4);
  7. $t.find('.boxik').css('margin','0 '+singleMargin+'px');
  8. });
  9. })(j);


Czyli obszar funkcji posiada zmienną lokalną "$", do której przekazujesz "j" czyli jQuery.

PS. noConflict() stosujesz tylko raz na poczatku.
Elber
BAJER MONACHIUM biggrin.gif:D Bardzo CI dziękuję za cierpliwość i nieocenioną pomooc wink.gif

Aczkolwiek 2gi przykład coś nie zadziałał smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.