| FAQ |
| Kalender |
|
|
|
|
#1 | ||
|
|||
|
Medlem
|
Jag försöker skapa ett memory. När två är öppna samtidigt ska de stängas igen efter två sekunder. För att man ska kunna öppna andra under tiden så får de en status "pending" så att de särskiljs. Såhär ser koden ut:
Kod:
this.find('li div').addClass(hidden).click(function() {
$(this).removeClass(hidden).addClass('open');
function hideit(el) {
el.removeClass('pending').addClass(hidden);
}
if($('.open').length>1) {
var el = $('.open');
el.removeClass('open').addClass('pending');
window.setTimeout(hideit(el), 2000);
}
});
|
||
|
|
Svara med citat
|
|
|
#2 | ||
|
|||
|
Mycket flitig postare
|
Testa att byta
window.setTimeout(hideit(el), 2000); mot window.setTimeout('hideit(el)', 2000); |
||
|
|
Svara med citat
|
|
|
#3 | ||
|
|||
|
Medlem
|
Senast redigerad av Althalos den 2010-04-24 klockan 12:02 |
||
|
|
Svara med citat
|
|
|
#4 | ||
|
|||
|
Mycket flitig postare
|
En gissning är att variabeln 'el' inte är definierad när funktionen hideit körs. Det är ju en lokalt definierad variabel på raden före setTimeout körs, alltså finns den inte definierad när hideit anropas 2000 ms senare.
Om du däremot kör hideit(el) utan fnuttar så evalueras ju uttrycket omedelbart på raden setTimeout(..), det är därför du upplever att bilden vänds tillbaka direkt. Dessutom ger det ju ett javascriptfel. |
||
|
|
Svara med citat
|
|
|
#5 | ||
|
|||
|
Medlem
|
På följande sida kör man utan fnuttar när man använder funktioner:
https://developer.mozilla.org/en/DOM/window.setTimeout Här är ett exempel på en kod som inte ger fel men som har fnuttar, och dessutom inte är beroende av någon variabel (den exekverar funktionen direkt): Kod:
/*
*
*
*/
(function($) {
$.fn.memorize = function(classes, hidden, q) {
classes.sort(function() {return 0.5 - Math.random()});
classes = classes.slice(0, 8);
classes = classes.concat(classes);
classes.sort(function() {return 0.5 - Math.random()});
for(var i=0; i<q*2; i++) {
this.prepend('<li><div class="'+classes[i]+'"></div></li>');
};
this.find('li div').addClass(hidden).click(function() {
$(this).removeClass(hidden).addClass('open');
function hideit(el) {
el.removeClass('pending').addClass(hidden);
}
if($('.open').length>1) {
var el = $('.pending');
el.removeClass('open').addClass('pending');
window.setTimeout("hideit($('.pending'))", 2000);
}
});
return this;
};
})(jQuery);
|
||
|
|
Svara med citat
|
|
|
#6 | ||
|
|||
|
Mycket flitig postare
|
Citat:
Vad du vill göra är att skicka med funktionen till setTimeout så den själv för köra funktionen. Finns två sätt: Kod:
window.setTimeout(hideit, 2000); Kod:
window.setTimeout(function(){hideit(el),2000)});
Hoppas det hjälpte dig lite på traven
|
||
|
|
Svara med citat
|
|
|
#7 | ||
|
|||
|
Medlem
|
Det fungerar, tack.
|
||
|
|
Svara med citat
|
| Svara |
|
|