Cemi Skrevet 6. mai 2011 Del Skrevet 6. mai 2011 (endret) Hei! Jeg har et problem med en Javascript funksjon som ikke fungerer i Firefox. Den fungerer derimot i Chrome, IE og Opera, så er litt usikker. Har prøvd å finne noe på google, men har ikke kunnet finne løsningen. Dersom noen vet hva det er, så hadde jeg satt stor pris på det! Funksjonen mottar en Sekund verdi ved kjøring, som den deretter gjør om til en Tid, og deretter teller ned, til den når 0 og da oppdaterer siden. Den arbeider mot et GridView fra ASP.NET. I firefox så skjer ingenting, GridView cellen beholder bare sin originale verdi, altså, sekund verdien som Javascript skal omgjøre og telle ned. /* Starter funksjonen, da jeg bare kan starte en JS funksjon på pageload i ASP.NET med MasterPages, så bruker jeg denne til å starte flere. */ function start() { setQueueCellValue(); } /* Regner sekunder til minutter */ function secondstominutes(secs) { var mins = Math.floor(secs / 60); secs = secs % 60; return (mins < 10 ? "0" + mins : mins) + ":" + (secs < 10 ? "0" + secs : secs); } /* Etter at sekunder har blitt gjort om til MM:SS teller denne ned 1 og 1 sekund. */ function replace(zz) { var re = new RegExp(":"); var m = re.exec(zz); if (m != null) { var t_array = zz.split(":"); var k = t_array[1]; var p = t_array[0]; if (k != 0) { k--; if (k < 10) { k = "0" + k; } } else if (p == 0) { t = setTimeout('window.location = window.location', 2000); } else { p--; if (p < 10) { p = "0" + p; } k = 59; } var t = p + ":" + k; } else { var test = zz; var t = secondstominutes(test - 1); } return t; } /* Henter ut og definerer variabler som brukes */ var gridViewCtlId = '<%=queueGridView.ClientID%>'; var gridViewCtl = null; var curSelRow = null; var curRowIdx = -1; /* Henter GridViewet, som er en tabell, hvor verdien hentes fra og settes tilbake til */ function getGridViewControl() { gridViewCtl = document.getElementById(gridViewCtlId); } /* Henter raden som verdien skal settes i */ function getGridRow(rowIdx) { getGridViewControl(); if (null != gridViewCtl) { return gridViewCtl.rows[rowIdx]; } return null; } /* Henter kolonnen verdien skal settes i */ function getGridColumn(rowIdx, colIdx) { var gridRow = getGridRow(rowIdx); if (null != gridRow) { return gridRow.cells[colIdx]; } return null; } /* Henter cellen verdien skal settes i */ function getCellValue(rowIdx, colIdx) { var gridCell = getGridColumn(rowIdx, colIdx); if (null != gridCell) { return gridCell.innerText; } return null; } /* Setter verdien til cellen */ function setQueueCellValue() { var gridCell = getGridColumn(1, 1); if (null != gridCell) { var zz = getCellValue(1, 1); var t = replace(zz); gridCell.innerText = t; t = setTimeout('setQueueCellValue()', 2000); } else { return null; } } Dersom javascriptet mitt er helt håpløst, så tar jeg selvfølgelig også gjerne imot tips ang. det Har særdeles lite erfaring med Javascript enda. Takk for at du (kanskje) leste ihvertfall, - Cemi Endret 7. mai 2011 av Cemi Lenke til kommentar
Gjest Slettet+9871234 Skrevet 6. mai 2011 Del Skrevet 6. mai 2011 (endret) Funksjonen mottar en Sekund verdi ved kjøring, som den deretter gjør om til en Tid, og deretter teller ned, til den når 0 og da oppdaterer siden. Jeg trodde der var innebygde funksjoner som for eksempel: http://www.w3schools.com/js/js_timing.asp du kunne bruke til dette. For ytterligere informasjon Google: javascript time functions Endret 6. mai 2011 av Slettet+9871234 Lenke til kommentar
Cemi Skrevet 6. mai 2011 Forfatter Del Skrevet 6. mai 2011 Jeg bruker jo Timing til å telle ned sekunder. Den greier derimot ikke å dekrementere på en string i format MM:SS. Derfor jeg splitter dem opp og kjører en funksjon for nedtelling. Lenke til kommentar
Thomas. Skrevet 9. mai 2011 Del Skrevet 9. mai 2011 (endret) Er det ikke lettere å gjøre det slik? <script type="text/javascript"> function countdown(time, name, num) { countdownDiv = document.getElementById(name + num); minutes = Math.floor(time / 60); seconds = time % 60; countdownDiv.innerHTML = 'Du må vente i <font style="color:#F00; font-weight:bold;">' + minutes + '</font> minutt og <font style="color:#F00; font-weight:bold;">' + seconds + '</font> sekunder!'; if(time == 0) { location.href="url du skal sendes til"; } if(time <= 0) countdownDiv.parentNode.removeChild( countdownDiv ); else setTimeout('countdown(' + --time + ',"' + name + '","' + num + '");', 1000); } </script> <span id="div_name1" class="info">ddd</span> <script type="text/javascript">countdown(120/** telle ned så mange sekund **/, "div_name", 1)</script> Altså, telle ned og videresende. Edit: trur jeg misforsto litt hva problemet ditt var Endret 9. mai 2011 av Thomas. Lenke til kommentar
Cemi Skrevet 9. mai 2011 Forfatter Del Skrevet 9. mai 2011 Det ville nok vært lettere, men den skal hente verdiene som skal telles ned fra en database, og telle ned et ukjent antall elementer. Derfor passer det seg bedre med et GridView, som er en tabell, hvor jeg lager "Sider" med fem elementer som man kan bla i. Ellers takk for svar Lurer enda på hvordan jeg kan få den til å fungere i Firefox. Lenke til kommentar
MailMan13 Skrevet 9. mai 2011 Del Skrevet 9. mai 2011 (endret) Nå er ikke jeg noe særlig på web, men er ikke innerText litt slemt å bruke? Prøv å bytte til innerHTML om det er kun tekst i <td>'ene. Er ikke noe glad i å indeksere manuelt i grids heller, blir fort veldig skjørt hvis du endrer på gridden, og det er ikke noe morsomt å rette opp i sånne skript. En greiere måte kan være å føye til en klasse på cellene som inneholder dataene, så plukke dem ut med f.eks jQuery med en class-selector heller enn å bruke "magiske"-indekser. Mener det er "ItemStyle" som bestemmer det om det er en BoundColumn i ASP.NET Endret 9. mai 2011 av MailMan13 Lenke til kommentar
Thomas. Skrevet 9. mai 2011 Del Skrevet 9. mai 2011 Det ville nok vært lettere, men den skal hente verdiene som skal telles ned fra en database, og telle ned et ukjent antall elementer. Derfor passer det seg bedre med et GridView, som er en tabell, hvor jeg lager "Sider" med fem elementer som man kan bla i. Ellers takk for svar Lurer enda på hvordan jeg kan få den til å fungere i Firefox. I nyeste firfox kan du trykke firefox->nettsideutvikling->konsoll. Så merker du kun av javascript, og oppdaterer siden, så sjekk om den finner noen feil/advarsler. Lenke til kommentar
Cemi Skrevet 11. mai 2011 Forfatter Del Skrevet 11. mai 2011 I nyeste firfox kan du trykke firefox->nettsideutvikling->konsoll. Så merker du kun av javascript, og oppdaterer siden, så sjekk om den finner noen feil/advarsler. Tenker det vil kunne være en særdeles nyttig funksjon, takk for det Men den kunne dessverre ikke hjelpe meg med problemet. Den gav ingen feil, og ingen advarsler. Lenke til kommentar
cbastus Skrevet 20. mai 2011 Del Skrevet 20. mai 2011 (endret) .innerText er en ustandardisert metode, standarden er .textContent men denne støttes dessverre ikke av alle browsere. Bytt til .innerHTML eller et rammeverk, så skal det fungere bedre. EDIT: Merket meg forresten at du har timeout på 2000 ms. men du trekker av tiden med 1 sec. Endret 20. mai 2011 av cbastus Lenke til kommentar
l3dx Skrevet 20. mai 2011 Del Skrevet 20. mai 2011 (endret) I tillegg til Error Console er det greit å bruke feks Firebug. I tillegg til feilmeldinger i console-viewet får du og mulighet til å sette breakpoints. Dessuten anbefaler jeg å vurdere jQuery (litt rart at ingen har nevnt det enda edit: overså visst MailMan13 sitt innlegg) . Det er kanskje en god grunn til at du ikke bruker det allerede, men om du hadde gjort det hadde du sluppet unna dette problemet. I tillegg vil du få penere kode blir mye morsommere å skrive javascript siden browserspesifikke ting abstraheres litt vekk. Endret 20. mai 2011 av l3dx Lenke til kommentar
cbastus Skrevet 20. mai 2011 Del Skrevet 20. mai 2011 Dessuten anbefaler jeg å vurdere jQuery ... OT kommentar: Jeg synes for mange hopper rett på JQuery el., før de forstår hvordan JS fungerer. På måten scriptet til TS er skrevet, virker det på meg som at det kan være lurt å ta noen runder og kode fra grunnen før han hopper på et rammeverk. Lenke til kommentar
l3dx Skrevet 22. mai 2011 Del Skrevet 22. mai 2011 Dessuten anbefaler jeg å vurdere jQuery ... OT kommentar: Jeg synes for mange hopper rett på JQuery el., før de forstår hvordan JS fungerer. På måten scriptet til TS er skrevet, virker det på meg som at det kan være lurt å ta noen runder og kode fra grunnen før han hopper på et rammeverk. Jeg er enig. Godt poeng! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå