Avatar billede kasseper Nybegynder
06. marts 2003 - 15:41 Der er 18 kommentarer og
2 løsninger

Rendering bliver forsinket.....innerHTML

Hey

Jeg har et script der i en container skal skrive loading, mens en iframe loader og udfylder en selectbox. Når iframen er færdig, søger den selv for at fjerne teksten loading igen.

Mit problem er at det kun er sjældent at det virker.

Her er mit script :

----------------------------------------------------------

document.all.exUser.innerHTML += "<span style='color: black'> ...Loading</span>"

// Det virker altid hvis man f.eks. sætter en alert ind her.
                       
document.all.existing.disabled = true;
loadingEx = true;
               
var current = document.all.fieldName[document.all.fieldName.selectedIndex].text;
//Her fjernes fra selecten.
var ref = document.all.existing;
for(var i = ref.length; i > -1; i--)
{
    ref.remove(i);
}
//existing_source er min iframe !
document.all.existing_source.src = "/servlet/MyServlet?action=getNames&fieldName=" + current;
   
--------------------------------------------------------       
Som jeg skriver kan jeg godt få det til at virke hvis jeg sætter en alert ind lige efter min innerHTML.

Det må være fordi at procceseringen bare fortsætter, også hænger fordi den for en tung opgave i min iframe....

Men hvordan for jeg alt til at stoppe indtil at jeg på skærmen kan se ...Loading
Avatar billede mortrr Praktikant
06. marts 2003 - 17:35 #1
Sikkert på grund af dårlig html
Avatar billede kasseper Nybegynder
07. marts 2003 - 15:30 #2
?????????????
Avatar billede kasseper Nybegynder
07. marts 2003 - 15:30 #3
Hvor faen er al den tekst jeg skrev ???
Den var der sq igår ???????????????????
Avatar billede mortrr Praktikant
07. marts 2003 - 18:19 #4
Det er sket mange steder herinde.
Avatar billede kasseper Nybegynder
13. marts 2003 - 14:18 #5
så motrr, så kan du gi dit bud, koden er der igen...!
Avatar billede mortrr Praktikant
13. marts 2003 - 14:30 #6
Det gør du ved at proppe teksten ind, "vente lidt" og fortsætte.
Du er nødt til at give siden lov til liige at vise teksten før du haster videre.
Det kan gøres med fx:

function DoItNow() {
document.all.existing.disabled = true;
loadingEx = true;
               
var current = document.all.fieldName[document.all.fieldName.selectedIndex].text;
//Her fjernes fra selecten.
var ref = document.all.existing;
for(var i = ref.length; i > -1; i--)
{
    ref.remove(i);
}
//existing_source er min iframe !
document.all.existing_source.src = "/servlet/MyServlet?action=getNames&fieldName=" + current;
}

document.all.exUser.innerHTML += "<span style='color: black'> ...Loading</span>"
setTimeout("DoItNow()",100)
Avatar billede kasseper Nybegynder
13. marts 2003 - 14:57 #7
Det duer ikke....!
når du kalder setTimeout, kan scriptet ikke 'catche-up'.
Problemet er IE's script engine tror at klient renderingen er opdateret så snart kaldet til innerHTML er afsluttet, og derfor fortsætter den bare, hvis den kommer til en setTimeout, går den straks igang med at tælle millisekunder og det hjælper altså ikke på at den skal nå at skrive det ud til skærmen.....
Avatar billede mortrr Praktikant
13. marts 2003 - 15:24 #8
Den står ikke og tæller "aktivt", men er straks parat til at lave andre ting.
Den sætter en "timer-interrupt" og laver hvad den ellers skal indtil tiden udløber.
Det er muligt at 100 millisekunder ikke er nok (burde det nu være).
Eller at du fortsætter med noget senere i scriptet.
Avatar billede kasseper Nybegynder
13. marts 2003 - 15:36 #9
Jeg er ikke enig med dig !
Jeg laver ikke noget i scriptet, før min iframe er loadet, hvilket kan tage op til 5-10 sekunder. og 100 millisekunder burde være mere end rigeligt.
Desuden er er det jo ikke 'pæn' kode. Jeg kan jo ikke vide hvilken maskine det kører på om det er en dual xeon 1800+ processor, eller en gammel 486 60Mhz ???!!!!
Det jeg egentlig søger er et script der kan stoppe al processering af scriptet, ligesom en alertbox faktisk gør. Forskellen skal bare være der her ikke skal være nogen bruger interaktivitet, før at scriptet skal fortæstte.
Jeg har prøvet at checke på om min exUser container indeholder det den skal, men det gør den jo iflg. js script enginen, men ikke visuelt....
Hmmmmmm, måske er der ikke en løsning..!
Avatar billede -mundi- Nybegynder
13. marts 2003 - 15:42 #10
der er ikke nogen javascript kommando som f.eks pause, det eneste der kan stoppe en javasctript afvikling er en meget lang løkke, muligvis noget med at registre klokken i starten af dit script og så lave et loop indtil tiden er gået:

starttid=gettime().
..
..
kode
kode
for(var i=1;1=1;i++){
  if(starttid+5 sekunder<=gettime()){
    break
  }

}
Avatar billede -mundi- Nybegynder
13. marts 2003 - 15:43 #11
det er ikke kønt og om det virker ved jeg ikke
Avatar billede kasseper Nybegynder
13. marts 2003 - 15:54 #12
så er setTimeOut da pænere, og det virker iøvrigt ikke...!
Avatar billede mortrr Praktikant
13. marts 2003 - 15:57 #13
kasseper > Jeg har brugt en lignende metode 100-vis af gange.
MEN hvis du udfører den idet selve siden loader giver det ikke mening at gøre det på den måde.
Så vil den jo altid starte med at loade iframen, og teksten skal være Loading fra starten af, og fjernes ved onload på dokumentet i iframe. Under load af hele siden vil du ikke se ændringen før siden er klar.

Når du vil hente nye navne, sætter du loading-teksten, og ændrer location på iframe. Når den er hentet helt trigges onload, nye navne proppes ind i selecten, og loading fjernes.
Og så er det totalt unødvendigt med en timeout.
Avatar billede kasseper Nybegynder
13. marts 2003 - 16:36 #14
Citat : "Når du vil hente nye navne, sætter du loading-teksten, og ændrer location på iframe. Når den er hentet helt trigges onload, nye navne proppes ind i selecten, og loading fjernes.
Og så er det totalt unødvendigt med en timeout." skulle meget gerne være lig med dette :
----------------------------------------------------------------------
document.all.exUser.innerHTML += "<span style='color: black'> ...Loading</span>"

// Det virker altid hvis man f.eks. sætter en alert ind her.
                       
document.all.existing.disabled = true;
loadingEx = true;
               
var current = document.all.fieldName[document.all.fieldName.selectedIndex].text;
//Her fjernes fra selecten.
var ref = document.all.existing;
for(var i = ref.length; i > -1; i--)
{
    ref.remove(i);
}
//existing_source er min iframe !
document.all.existing_source.src = "/servlet/MyServlet?action=getNames&fieldName=" + current;
   
----------------------------------------------------------------------

Det er præcis det jeg gør, og det er det der ikke virker....!
Avatar billede kasseper Nybegynder
13. marts 2003 - 16:36 #15
og jeg udfører den ikke idet siden loader, scriptet triggers af en anden update af en anden select box....!
Avatar billede mortrr Praktikant
13. marts 2003 - 16:52 #16
Så må den forsinkelse du snakker om, være fra du vælger noget, til din select er tømt?

Brug
formular.selectnavn.options.length=0;
i stedet for at fjerne dem en ad gangen.
Avatar billede mortrr Praktikant
13. marts 2003 - 17:01 #17
Forresten - din iframe - udfører den scripts mens den loader, eller venter den til onload?
Avatar billede kasseper Nybegynder
09. maj 2003 - 15:56 #18
ja tak, det virker nu, kan du svare ?
Avatar billede kasseper Nybegynder
09. maj 2003 - 15:57 #19
Jeg brugte ikke helt din metode, men noget af den.
Den hvor du sætter options.length = 0, og det gav lidt, også lavede jeg andre fix faxerier, så vi deler i porten...!
Avatar billede mortrr Praktikant
09. maj 2003 - 17:49 #20
Det er selvfølgeligt helt op til dig.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester