13. oktober 2000 - 12:19Der er
12 kommentarer og 1 løsning
BODY OnLoad=\"parent.Footer.Formular.Besked.focus()\"
Tjaa, som subject siger, benytter jeg mig af oven/nedenstående stykke \"kode\", til at sikre at tekst feltet altid er aktivt (læs: lette brugernes hverdag)
Men problemet kommer jo så ved at jeg (som koden antyder) har focus tingen i en frame af et frameset og tekstfeltet i en anden frame, kan jeg ikke på en eller anden måde sikre at focus kun bliver når det er sikkert at siden ER loadet (jeg er ret træt af at få en fejl ved opstarten af siden første gang)
Jo, du kan kigge på det her: function check() { if (parent.Footer.document.readyState==\"complete\") // er siden loadet else parent.Footer.document.onreadystatechange=check; }
mpj>> nej, det kan du ikke være sikker på - der er stadigvæk (ynk) folk med ufatteligt langsomme modemmer, pakker der ikke når frem og derfor skal hentes igen osv.osv.osv. Dit svar har tre andre problemer: 1) hvis \'Footer\' ikke er indlæst første gang fokus() køres kommer der en fejlmeddelelse der (ihvertfald i Netscape) vil afbryde yderligere script udførsel; det medfører så at din timeout aldrig udføres.. 2) hvis nu fokus er færdigindlæst 100 millisekunder efter den side scriptet er i er der jo ingen grund til at vente 2 sekunder. 3) Du bliver ved med at sætte fokus på \'Besked\' hvert andet sekund. Mon ikke enhver bruger vil blive temmeligt irriteret over det ?!
Den eneste rigtige måde at gøre det på er at tjekke readystate propertyen..
DOH :o(, det virker desværre ikke... nu har jeg selv siddet og roddet med det et par timer og kan ikke fremprovokere andet end rigtige fejl (der slår browsere ihjel) og alerts der udskriver om siden er loadet eller ej. Mit frameset ser sådan ud: <FRAMESET ROWS=\"60px,*,150px\" Border=\"0\" Bordercolor=\"Blue\"> <FRAME NAME=\"Header\" SRC=\"Header.asp\" NORESIZE SCROLLING=\"NO\"> <FRAME NAME=\"Body\" SRC=\"Body.asp\" NORESIZE SCROLLING=\"Auto\"> <FRAME NAME=\"Footer\" SRC=\"Footer.asp\" NORESIZE SCROLLING=\"NO\"> </FRAMESET>
og det er en <body OnLoad=\"??\"> funktion jeg skal bruge i body.asp siden...
Håber du kan få det til at spille ? Din kode giver mig syntax error linie 11 og 18...
Toppen af body.asp ser sådan ud: <% Option Explicit %> <% On Error Resume Next %> <!-- #Include file=\"../../safe.asp\" --> <!-- #Include file=\"../../const.inc\" --> <HTML> <HEAD> <TITLE>Chat Body</TITLE> <meta http-equiv=\"refresh\" content=\"5; url=Body.asp\"> </HEAD> <SCRIPT LANGUAGE=javascript> <!-- function check() { if (parent.Footer.document.readyState==\"complete\") // er siden loadet else parent.Footer.document.onreadystatechange=check; } //--> </SCRIPT>
Nu virker det jo godt nok som om du har ret godt styr på det, så du har sikkert ikke brug for det, men her er hvad MSDN siger om readyState: readyState -------------------------------------------------------------------------------- Description Specifies the current state of an object being downloaded.
Syntax object.readyState
Settings Possible values include: uninitialized The object is not initialized with data. loading The object is currently loading its data. interactive The object can be interacted with even though it is not fully loaded. complete The control is completely loaded.
Remarks Each object can independently determine which of the four states it exposes. This property has read-only permission, meaning you can retrieve its current value, but not change it.
Applies To IMG, LINK, OBJECT, SCRIPT, STYLE, document
See Also onreadystatechange
Og MSDN om onreadystatechange: onreadystatechange -------------------------------------------------------------------------------
Description Fires whenever the ready state for the object has changed.
Remarks Each object can choose to expose which set of ready states it is exposing. This event should be fired whenever the ready state is changed. When an element changes to the loaded state, this event fires immediately before the firing of the load event. This event will not bubble. Events that do not bubble can only be handled on the individual object that fired the event.
Applies To APPLET, EMBED, IMG, LINK, OBJECT, SCRIPT, STYLE, document
arhhh.... ok... Jeg lavede vist ikke nogen særlig god forklaring til min kodestump.. // (altså to skråstreger) betyder at resten af linjen skal opfattes som en kommentar af browseren - derfor opfatter den det som \"if(et udtryk her) \" og så ingenting - det giver en syntaksfejl - jeg mente at man herefter så kan skrive kode man kan bruge :) her er et bedre eksempel, denne gang din egen kode rettet til: <% Option Explicit %> <% On Error Resume Next %> <!-- #Include file=\"../../safe.asp\" --> <!-- #Include file=\"../../const.inc\" --> <HTML> <HEAD> <TITLE>Chat Body</TITLE> <meta http-equiv=\"refresh\" content=\"5; url=Body.asp\"> </HEAD> <LINK REL=stylesheet HREF=\"../../Style.css\"> <SCRIPT LANGUAGE=javascript> <!-- function check() { if (parent.Footer.document.readyState==\"complete\") parent.Footer.Formular.Besked.focus() else parent.Footer.document.onreadystatechange=check; } //--> </SCRIPT> </HEAD> <BODY onload=\"check()\">
Jeg har ikke lige mulighed for at teste det lige nu (har lidt travlt, skal lige lave en større programstump færdig til i morgen :) - men hvis ikke det spiller må du lige sige til, så kan jeg nok hjælpe dig med det aligevel..
Jeg får samme resultat som uden koden...dvs. i ca. 10% af tilfældene hentes siden perfekt, mens resten returnerer den fejl jeg vil undgå: Error
A Runtime Error has occured. Do you wish to Debug?
Line: 12 Error: \'parent.Footer.Formular.Besked\' is not an object
Hvordan slipper jeg uden om den ?? Kan man ikke på en eller anden måde angive at \"Body\" frame\'n først skal loades når \"Footer\" frame\'n ER loadet ?
sorry, vi har virkeligt travlt på arbejde lige nu - vender tilbage senest i slutningen af denne uge... jeg tror nu nok det er onreadystatechange eventen der ikke bliver affyret - måske er der lidt fejl med den... prøv at sætte en timeout på 100ms i checkfunctionen\'s else...det var det jeg selv gjorde da jeg havde dette problem...
noget i denneher stil: function check() { if (parent.Footer.document.readyState==\"complete\") parent.Footer.Formular.Besked.focus() else setTimeout(\"check()\",100) }
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.