Gå til innhold

JavaScript funksjon fungerer ikke i Firefox.


Anbefalte innlegg

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 av Cemi
Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+9871234

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 av Slettet+9871234
Lenke til kommentar

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

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 :D

Endret av Thomas.
Lenke til kommentar

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

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 av MailMan13
Lenke til kommentar

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

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. :hmm:

Lenke til kommentar
  • 2 uker senere...

.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 av cbastus
Lenke til kommentar

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 av l3dx
Lenke til kommentar

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...