Kom ihåg mig?
Home Menu

Menu


Hjälp med avancerad javascript!

Ämnesverktyg Visningsalternativ
Oläst 2009-03-09, 17:48 #1
Landos avatar
Lando Lando är inte uppkopplad
Medlem
 
Reg.datum: Nov 2008
Inlägg: 242
Lando Lando är inte uppkopplad
Medlem
Landos avatar
 
Reg.datum: Nov 2008
Inlägg: 242
Tja dudes!
Jag skall bygga en sida som helt använder såna här länkar:
Kod:
<a href="#/page.php?id=1234">Min sida</a>
Men problemet är hur skall jag med JS veta att # förändrats?

Tex: Säg att jag klickar mig in på #page.php?id=1234 ifrån #contact.php och sedan klickat på bakåt-knappen?

Finns det något event som typ:
Kod:
<script>window.onChangeIDurl = function() { /*byt sida*/ }</script>
Hur gör facebook tex? De har ett sådant system.
Lando är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-09, 21:19 #2
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
först och främst skall du väl se till att din sajt fungerar utan javascript så ha "vanliga" länkar också sedan använder du javascript för att avaktivera länkarna (return false; på eventet)

Kolla lite hur jag testat mig runt på allstars.se/ajax.asp och jämför med huvudsajten allstars.se. Jag har använt mig av jQuery till största delen.
allstars är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-09, 21:26 #3
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Jag förstår inte riktigt hur du tänkt dig det men det vanliga är att man gör:

Kod:
<a href="page.php?id=1234" onclick="openPage(1234)">Min sida</a>
Så att det fungerar både med och utan JavaScript.

För att få bokmärken och framochtillbaka-navigering att fungera använder du location.hash
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-09, 21:30 #4
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Precis som allstars säger tycker jag du ska utgå från vanliga länkar till hela sidorna och sedan t ex lägga på en get-variabel som ger dig samma sida utan det du behåller om du ska hämta den via javascript.

Sen brukar man såvitt jag vet normalt sett lägga event handlers på länkarna och inte försöka lägga de ett steg efter klicket på länken. T ex något i stil med (otestad, med jquery och ungefär ditt exempel):
Citat:
$('a[href^=#page.php]').click(function(){$('#container').load('handler. php?page' + $(this).attr('href')); });
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-10, 15:58 #5
Landos avatar
Lando Lando är inte uppkopplad
Medlem
 
Reg.datum: Nov 2008
Inlägg: 242
Lando Lando är inte uppkopplad
Medlem
Landos avatar
 
Reg.datum: Nov 2008
Inlägg: 242
Ingen som använder facebook alltså?

Enda lösningen på mitt problem är om man har en JS-loop som ständigt kollar om # har förändrats men min fråga var.

Finns det något event eller onNått som gör detta?

tex:

1. Nu är jag på #sida=1

2. Nu klickar jag på bakåt-knappen och kommer till #minsida

3. Något i stil med window.onChangeUrl = function() {/*byt till #minsida */ } körs

Som jag sa kan man ju ha en loop som kollar varje sek eller något men det är ganska opraktiskt.
Lando är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-10, 16:51 #6
mr_lundis mr_lundis är inte uppkopplad
Medlem
 
Reg.datum: May 2006
Inlägg: 218
mr_lundis mr_lundis är inte uppkopplad
Medlem
 
Reg.datum: May 2006
Inlägg: 218
Du behöver väl inte ligga och polla om URL hashen förändras.

I mina ögon verkar det räcka med att:
1. Ladda sidans innehåll första gången den hämtas (säg att någon går in på www.sidan.se/index.html#en-annan-sida)
2. Lyssna på alla onClick events för länkar och uppdatera sidans innehåll samt URL hashen där efter.

Det finns ett helt gäng färdiga script ute på nätet för att göra detta, till exempel detta:
http://maxblog.me/ajaxify/
mr_lundis är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-10, 23:44 #7
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Ursprungligen postat av Lando
Ingen som använder facebook alltså?
Det finns säkerligen en och annan som hört talas om facebook här men det betyder inte att deras lösning är den bästa - ärligt talat är det väl stor risk för att facebook är ett kaka-på-kaka-bygge som egentligen inte är så genomtänkt även om det för det mesta fungerar bra och ser fint ut.
Citat:
Ursprungligen postat av Lando
Enda lösningen på mitt problem är om man har en JS-loop som ständigt kollar om # har förändrats men min fråga var.

Som jag sa kan man ju ha en loop som kollar varje sek eller något men det är ganska opraktiskt.
Vad som finns i form av events är onunload om du lämnar sidan. Men det känner du säkert till.

1. Det känns ganska mycket som du har en strukturmiss i din kod. Förändringen av url:en måste ju uppstå någonstans, t.ex. genom ett klick på någonting och då är det en onclick där (eller ett onclick på hela dokumentet som bubblar om du så vill) som bör ta hand om händelsen. Jag kan inte tänka mig att du försöker kolla om användaren faktisk skriver in någonting i adressfältet (dvs. onUrlChange) och för detta finns det av naturliga skäl ingen event.

2. Om du menar att facebook löst detta på ett bra sätt så är väl bästa lösningen att titta vidare där.

3. Din applikation bör väl kunna fungera även utan javaskript (jag ser inte hur det kan fungera med den metoden du beskriver). Eller vill du undvika detta?

4. Du använder en metod som avviker från vad andra föreslagit här eller det som brukar vara det vedertagna sättet att lösa dessa problem - är du säker på att du är inne på rätt väg (att köra ett evigt loopande bara för att kontroller om något förändrats känns lite föråldrat eller underligt nuförtiden).
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-03-11, 08:47 #8
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
allstars allstars är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Apr 2006
Inlägg: 2 126
du skall alltså inte ha # i länken initiellt utan med js lägga till detta för att göra funktionen unobtrusive.

säg att du har en meny (till att börja med) som en lista
Kod:
$().ready(function(){
 // för att lägga till ankarlänk till menyn
 $("#nav li a").foreach(function(){
  var href = $(this).attr("href");
  $(this).attr("href","#"+href)
 });
 // För att ladda om innehållet från länkad sida
 $("#nav li a").click(function(){
  var href = $(this).attr("href");
  //Hämtar innehållet från sida och endast avsnittet i #content
  $("#content").load(href+" #content>*",{var1:"variabel_om_du_vill"},onComplete);
  function onComplete(){
  //Om något skall utföras efter det att sidan hämtats
  }
 });
}):
allstars är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 16:35.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017