2014-02-07, 23:09
  #1
Medlem
Caffos avatar
Hejsan! Jag r fortfarande i vldigt tidig lrningsprocess inom javascript/jquery, s jag letar igentligen upp snt jag vill kunna, och lr mig just -det-, och missar skert(klart och tydligt!) en massa viktig information p vgen.

jag frsker loopa en kod som frndrar $('div'). allt borde funka (tycker jag). Har 'alertat' ut for-loops fr att se s det inte r jag som ftt kodningen om bakfoten, och det funkar som det ska.

S hr har ni koden:
Kod:
/* FUNGERANDE KOD
	$('a[name=home]').click(function(){ $('html, body').animate({scrollTop:$('#home').offset().top}, '200'); });
	$('a[name=about]').click(function(){ $('html, body').animate({scrollTop:$('#about').offset().top}, '200'); });
	$('a[name=pictures]').click(function(){ $('html, body').animate({scrollTop:$('#pictures').offset().top}, '200'); });
	$('a[name=contact]').click(function(){ $('html, body').animate({scrollTop:$('#contact').offset().top}, '200'); });
	*/
	
/*ICKE FUNGERANDE KOD*/
	var test = new Array('home', 'about', 'pictures', 'contact');
	for(var i = 0; i < 4; i++){
		$('a[name='+test[i]+']').click(function(){ $('html, body').animate({scrollTop:$('#'+test[i]).offset().top}, '200'); });	
	}

fr att frtydliga: Min for-loop gr ingenting. nada.

Tack p frhand!
jsfiddle.net
Citera
2014-02-07, 23:40
  #2
Medlem
Du r inne i ett annat namespace/scope/funktion, funktionerna du skriver (innehllet i click) krs ju frst nr du trycker p knappen. (Hint "i" variabel inne i under funktionerna har alltid samma vrde nr de(=underfunktionerna clickhandlerna krs)
Ja du har 3 olika click handlers som alla effektiv har samma i
I teorin skulle du kunna wrappa allt i en extra function och f din kod att "funka"
Men att skriv en loop istllet fr 3 rader r inte vrt det (inte vrt det fr 7 rader heller).
Mycket svrare att lsa den koden.(ven om den funkar)
Citera
2014-02-07, 23:44
  #3
Medlem
AquaRegias avatar
Koden fungerar, men kanske inte som du hade frvntat dig, och frklaringen till det kan du hitta hr: https://developer.mozilla.org/en-US/...common_mistake

Man kan f ditt exempel att fungera genom att byta ut:

Kod:
var test = new Array('home''about''pictures''contact');
for(var 
04i++)
{
    $(
'a[name='+test[i]+']').click(function()
    {
        $(
'html, body').animate({scrollTop:$('#'+test[i]).offset().top}, '200');
    });    


mot:

Kod:
var test = new Array('home''about''pictures''contact');
for(var 
04i++)
{
    $(
'a[name='+test[i]+']').click(function(i)
    {
        return function()
        {
            $(
'html, body').animate({scrollTop:$('#'+test[i]).offset().top}, '200');
        }
    }(
i));    

Citera
2014-02-08, 11:23
  #4
Medlem
quanto_tempos avatar
Du gr det svrare fr dig n vad det r, strunta i loopen och kr p detta:


Kod:
$('a[name=home], a[name=about], a[name=pictures], a[name=contact]').click(function(){ 
    $(
'html, body').animate({scrollTop:$('#' + $(this).attr('name')).offset().top}, '200'); 
}); 


Mvh quanto_tempo
__________________
Senast redigerad av quanto_tempo 2014-02-08 kl. 11:28.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in