Avatar billede tigerdyr Nybegynder
13. oktober 2000 - 12:19 Der 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)

<BODY OnLoad=\"parent.Footer.Formular.Besked.focus()\">

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)

/Tigerdyr
Avatar billede nixen Nybegynder
13. oktober 2000 - 12:29 #1
Jo, du kan kigge på det her:
function check() {
if (parent.Footer.document.readyState==\"complete\") // er siden loadet
else parent.Footer.document.onreadystatechange=check;
}
Avatar billede mpj Nybegynder
13. oktober 2000 - 16:14 #2
Du kan også

function fokus() {
parent.Footer.Formular.Besked.focus()
settimeout(\'fokus()\',\'2000\');
}

<BODY OnLoad=\"fokus()\">

Så venter den 2 sekunder, og så er den anden side nok indlæst...
I hvertfald formen!

Avatar billede nixen Nybegynder
13. oktober 2000 - 16:20 #3
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..
Avatar billede mpj Nybegynder
13. oktober 2000 - 16:23 #4
Nååhhh ja... det gør den jo også... (hvert andet sekund!)
Avatar billede tigerdyr Nybegynder
13. oktober 2000 - 20:12 #5
Jeg tjekker lige dit svar af nixen, men det lyder præcis som det jeg mangler :o)
Avatar billede tigerdyr Nybegynder
13. oktober 2000 - 23:09 #6
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>

<LINK REL=stylesheet HREF=\"../../Style.css\">
<!-- <BODY OnLoad=\"parent.Footer.Formular.Besked.focus()\"> -->
<body OnLoad=\"check()\">

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

See Also
onload, readyState


Seriously need help here!
Avatar billede nixen Nybegynder
15. oktober 2000 - 17:09 #7
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..
Avatar billede tigerdyr Nybegynder
16. oktober 2000 - 10:38 #8
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 ?
Avatar billede nixen Nybegynder
17. oktober 2000 - 15:25 #9
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...
Avatar billede tigerdyr Nybegynder
17. oktober 2000 - 20:13 #10
øh, kan du udbyde den lidt ?? (JavaScript er ikke min stærke side... alerts og små funktioner er mine erfaringer med det).

Jeg håber virkelig at du kan finde tiden til at hjælpe mig med det her, for det er en del af et projekt som snart skal afleveres :o((
Avatar billede nixen Nybegynder
17. oktober 2000 - 20:25 #11
noget i denneher stil:
function check()
{
if (parent.Footer.document.readyState==\"complete\") parent.Footer.Formular.Besked.focus()
else setTimeout(\"check()\",100)
}
Avatar billede tigerdyr Nybegynder
18. oktober 2000 - 22:57 #12
Hey hey, det ser umiddelbart ud til at virke...(og ellers vender jeg frygtløst tilbage, indtil videre siger jeg mange tak for hjælpen)
Avatar billede nixen Nybegynder
19. oktober 2000 - 10:41 #13
no probs!
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

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