24. januar 2010 - 20:48Der er
20 kommentarer og 1 løsning
var i "callback"
jeg kører et objekt igennem en for-løkke og til hver forekomst i objektet skal der kobles en onmouseover funktion til.. problemet er så at at alle funktionerne kun vil henvise sidste forekomst i objektet..
hvordan kommer jeg ud over det? hvordan kan jeg angive en variabel i onmouseover funktionerne der forbliver med den samme værdi?
hvis det gav nogen mening? hehe
for(var key in acc_obj) { var tr_acc = tbl.insertRow(-1); tr_acc.onmouseover = function() { var div_actions = document.getElementById('div_acc_actions'+acc_obj[key].id); if(div_actions) div_actions.style.visibility = 'visible'; }; }
lige så snart funktionen har returneret så nulstilles alle variabler. du bør lave en global variabel uden for funktionen som indeholder den værdi du vil gemme. ellers skal den kaldende funktion sørge for at sende variablens værdi med.
- det virker som om at onmouseover virker som en callback og den først kalder værdien i det øjeblik den skal bruges.. værdien indeholder derfor den værdi fra sidste løkke i objektet..
har også forsøgt at lave variablen udenfor min funktion men lige lidt hjælper det.. den henter stadig den værdi som variablen har i det øjeblik den kaldes.. altså værdien fra sidste lække :-/
En anden ting, det ligner at du bare sætter onmouseover eventen på det samme element hele tiden. var tr_acc = tbl.insertRow(-1);
Jeg kan ikke hvordan det giver flere forskellige elementer, da det er den samme kode der køres hele tiden (måske overser jeg noget?). Men hvis du sætter en onmouseover event på samme element, vil det jo blive overskrevet fra gang til gang, og til sidst er der kun det sidst indsatte tilbage. Som er den værdi du får når du kører eventen.
acc_obj indeholder et mysql-udtræk som jeg vil skrive en tabel ud fra..
problemet er så at onmouseover jo er en callback funktion.. hvordan kan jeg lave div_actions til noget statisk eller bare så jeg får fat i den rigtige række og ikke den sidste altid..
style.background henviser til rækken jeg står i men det gør div_actions ikke
Ja, det kan jeg godt se. Jeg løste problemet ved at smide dine events in i en anonym funktion, der bliver kørt med 'key' som parameter. På den måde bliver den gemt og i den form den er i, når du sætter eventen.
Her er en ny kode til dine to events: (function(key){ tr_acc.onmouseover = function() { this.style.background = '#dddddd'; document.getElementById('spn'+acc_obj[key].id).style.visibility = 'visible'; }; })(key);
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.