Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] działanie funkcji load()
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
tkopacki
Witam, potrzebuje zrobić na stronie efekt przejścia między kolejnymi podstronami.
  1. $('a').live('click',function(){
  2. var s = $(this).attr('href');
  3. var l = s.substr(0,s.length-5); //uzyskuję nazwę pliku bez rozszerzenia
  4. window.location.hash = l; //ustawiam adres w przeglądarace
  5. $('#content').html('').load(get + '.html' + ' .site');//czyszczę kontener na dane i wczytuję odpowiednią podstronę
  6. addScript('lay/js/jquery.misc.js');//dopisuję skrypt, by js z podstrony działał poprawnie
  7. return false;
  8. });
  9.  
  10. $(document).ready(function(){
  11. var get = window.location.hash.substr(1).length > 0 ? window.location.hash.substr(1) : page; // sprawdzam czy istnieje hash
  12. //i odtąd zaczyna się problem, bo zaladowaniu podstrony, nie działa na niej js.
  13. $('#content').html('').load(get + '.html' + ' .site');//czyszczę kontener na dane i wczytuję odpowiednią podstronę
  14. //by działał js na załadowanej funkcją load() podstronie, muszę znowu wczytać skrypt - ale pojawia się problem, bo skrypt wtedy się zapętla...
  15. //addScript('lay/js/jquery.misc.js');
  16. setup(get);//wczytuję odpowiedni kod js dla załadowanej podstrony
  17. });

Wszystko fajnie działa jak się klika po odnośnikach (pierwsza część kodu), ale kiedy otwieram nową kartę przeglądarki i wpisuję adres strony np. www.strona.pl/#news to nie wczytuje poprawnie podstrony - nie wiem jak dalej z tym ruszyć...
Proszę o podpowiedzi.
Pozdrawiam, Tomek.
erix
A w konsoli sypie jakimś błędem?

Ja bym zrobił to tak:
[JAVASCRIPT] pobierz, plaintext
  1. var load = function(link){
  2. var s = link;
  3. var l = s.substr(0,s.length-5); //uzyskuję nazwę pliku bez rozszerzenia
  4. window.location.hash = l; //ustawiam adres w przeglądarace
  5. $('#content').html('').load(get + '.html' + ' .site');//czyszczę kontener na dane i wczytuję odpowiednią podstronę
  6. addScript('lay/js/jquery.misc.js');//dopisuję skrypt, by js z podstrony działał poprawnie
  7. };
  8.  
  9. $('a').live('click', function(e){ load($(this).attr('href'); e.preventDefault(); }
  10.  
  11. $(document).ready(function(){
  12. var get = window.location.hash.substr(1).length > 0 ? window.location.hash.substr(1) : page; // sprawdzam czy istnieje hash
  13. load(get);
  14. });
[JAVASCRIPT] pobierz, plaintext
tkopacki
Dziękuję za odpowiedź. Niestety nie działa Twój kod tak jak należy. Nie chcę nadpisywać funkcji load() bo jest ona w jQuery - nie wiem jak skrypt ma rozróżnić, czy wchodzi się na podstronę przez wpisanie adresu z hashem, czy po kliknięciu w link na stronie.
Strona o podobnym działaniu (chciałbym osiągnąć taki efekt)
http://www.thewisdomofbees.com/#/wisdom-bees
erix
Cytat
Dziękuję za odpowiedź. Niestety nie działa Twój kod tak jak należy. Nie chcę nadpisywać funkcji load() bo jest ona w jQuery

W życiu bym Cię do czegoś takiego nie namawiał. var dla load oznacza, że jest to funkcja LOKALNA, a load w jQuery jest wywoływana w kontekście obiektu.

Cytat
ma rozróżnić, czy wchodzi się na podstronę przez wpisanie adresu z hashem, czy po kliknięciu w link na stronie.
Strona o podobnym działaniu (chciałbym osiągnąć taki efekt)

Wiem. Choć zastanawia mnie to, dlaczego implementujesz to samodzielnie, skoro jest np. plugin jQuery History. winksmiley.jpg
tkopacki
Tak, wiem o tym pluginie, ale on chyba jest przydatny przy klikaniu "Wstecz" w przeglądarce? Mam jeszcze jedno małe pytanie: jak usunąć obiekt z pamięci jQuery? Używam takiej konstrukcji $(selektor).empty().remove(); ale i tak jQ dalej pamięta ten obiekt choć nie ma go w DOM. Stwarza mi to problem przy sliderze newsów, bo gdy drugi raz wejdę na stronę z newsami to po kliknięciu na odpowiedni button przesuwają się po dwa newsy; jak kliknę 3. raz w celu załadowania podstrony z newsami to analogicznie przesuwają się po 3 newsy itd...

Tutaj jest kod js który napisałem http://wklej.org/id/367753/
erix
Cytat
Tak, wiem o tym pluginie, ale on chyba jest przydatny przy klikaniu "Wstecz" w przeglądarce?

Nie, jakakolwiek zmiana hasha -> wyzwalana jest Twoja funkcja. http://team.pcinside.pl - masz tu implementację. winksmiley.jpg

Cytat
Używam takiej konstrukcji $(selektor).empty().remove(); ale i tak jQ dalej pamięta ten obiekt choć nie ma go w DOM.

To znaczy?

Cytat
bo gdy drugi raz wejdę na stronę z newsami to po kliknięciu na odpowiedni button przesuwają się po dwa newsy; jak kliknę 3. raz w celu załadowania podstrony z newsami to analogicznie przesuwają się po 3 newsy itd...

Z kompletnym przeładowaniem, czy bez?

Puść to gdzieś na żywo, będzie łatwiej zrozumieć i zdiagnozować.
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.