infostabil > edb.internet.* > edb.internet.webdesign.clientside

Rune Jensen (24.12.2007, 15:48)
[..]

Her ligger min shoutbox. Jeg har fulgt anvisningen fra Birger - tak for den
iøvrigt - så at den nu kan vise en tekst fra en .txt-fil. Imidlertid kan jeg
ikke få den til at hente det serverside-script, som lægger ny tekst til
filen. Foreløbig er serversiden lavet, så der automatisk tilføjes den samme
tekst (This text will be added to end of file"), og efter råd fra Stig -
også tak - så virker den del. Men problemet er altså at JSen ikke vil kalde
scriptet. Hva hulen gør jeg galt???
Erik Ginnerskov (24.12.2007, 17:45)
Rune Jensen wrote:

> problemet er altså at JSen ikke vil kalde scriptet. Hva hulen gør jeg
> galt???


Jeg forstår ikke, hvorfor dit input-textarea og din submit ikke er lagt i en
formular, hvor dit serverside-script er adresseret i formularens action. Det
er muligvis fordi jeg ikke har fattet ajax, men sådan ville jeg altså lave
det.

Dit serverside-script skal så slutte af med igen at kalde din side, som så
automatisk vil indeholde den tilføjede tekst.
Rune Jensen (25.12.2007, 01:13)
"Erik Ginnerskov" skrev...

> Jeg forstår ikke, hvorfor dit input-textarea og din submit ikke er lagt i
> en formular, hvor dit serverside-script er adresseret i formularens
> action. Det er muligvis fordi jeg ikke har fattet ajax, men sådan ville
> jeg altså lave det.
> Dit serverside-script skal så slutte af med igen at kalde din side, som så
> automatisk vil indeholde den tilføjede tekst.


I så fald vil den vel gentegne hele siden...? Meningen er, den alene skal
gentegne boksen med "chatteksten", når man trykker "send", og ikke andet på
siden.

Forstod dog ikke helt Birger og Stigs forklaringer ang. dette, så muligt,
jeg har misforstået noget, og du alligevel har ret. Ville i hvert fald gerne
have en uddybning fra en eller anden med AJAX-indsigt.

MVH
Rune Jensen
Stig Johansen (25.12.2007, 10:27)
Rune Jensen wrote:

> [..]
> Her ligger min shoutbox. Jeg har fulgt anvisningen fra Birger - tak for
> den iøvrigt - så at den nu kan vise en tekst fra en .txt-fil. Imidlertid
> kan jeg ikke få den til at hente det serverside-script, som lægger ny
> tekst til filen. Foreløbig er serversiden lavet, så der automatisk
> tilføjes den samme tekst (This text will be added to end of file"), og
> efter råd fra Stig - også tak - så virker den del. Men problemet er altså
> at JSen ikke vil kalde scriptet. Hva hulen gør jeg galt???


Der er en del fejl Rune.
Jeg er i gang med en lokalt tilrettet version, hvor indlæsningen virker, men
den 'dør' ved klik på send tasten. Nu har jeg sat mig for at få det til at
virke i min Konqueror, men der kun 'fattigmandsdebugging' aka en masse
alerts.

Jeg er gået lidt død i overblikket, så jeg fortsætter en anden gang - hvis
du ikke har fået 'hul' igennem.

Men her er et par ting, jeg har fundet ud af indtil videre (du må selv finde
stederne, jeg har mistet overblikket).
* Textarea skal sættes med .value og ikke .innerHTML
* Et eller andet sted har brugt Text i stedet for Tekst - eller omvendt.
* Du har glemt "id" et sted, der var kun "name"

* url'er skal være absolutte, altså incl http:// osv.
* GET af .txt filen giver en 304 Not modified, så vi skal bruge
høkertrikket, jeg har brugt:
<body
onload="HentFil('http://runejensen.dk/shoutbox.txt?dummy='+Math.random());"

Det skal nok omstruktureres, så 'vi' bruger Hentfil efter tryk på 'Send'.

Giv lige et praj hvis du får rettet nogle af disse ting.
Rune Jensen (26.12.2007, 02:19)
"Stig Johansen" skrev...
<SNIP>

> Men her er et par ting, jeg har fundet ud af indtil videre (du må selv
> finde
> stederne, jeg har mistet overblikket).


Jeg har nu kigget på det en 4 timers tid, og der er fremskridt

> * Textarea skal sættes med .value og ikke .innerHTML


Jeg lavede det om til en DIV for at få mulighed for at lave styling af
teksten indeni.

> * Et eller andet sted har brugt Text i stedet for Tekst - eller omvendt.


Stavefejl. Er rettet

> * Du har glemt "id" et sted, der var kun "name"


Er rettet

> * url'er skal være absolutte, altså incl http:// osv.


Jeg fik det til at virke med relative URLs. Men er der en særlig grund til,
man anbefaler absolut URL?

> * GET af .txt filen giver en 304 Not modified, så vi skal bruge
> høkertrikket, jeg har brugt:
> <body
> onload="HentFil('http://runejensen.dk/shoutbox.txt?dummy='+Math.random());"


Der er udvidet lidt med en timer.

> Det skal nok omstruktureres, så 'vi' bruger Hentfil efter tryk på 'Send'.


Ja, jeg fik det inkluderet

> Giv lige et praj hvis du får rettet nogle af disse ting.


Både dig og Birger er geniaaaale - bliv endelig ved;-)

Det ser ud til at virke efter hensigten nu. To ting irriterer, dog:

1. Jeg har stadig ikke fattet forskellen på synkron/asynkron og get/post i
AJAX
2. Den dér math/høkertricket... Det må jeg lige kigge på. Jeg synes, jeg er
kommet udom det før, men godt nok ikke med JS. Kan man få JS til at Flushe
cashen? Jeg tænker på, om cashen ikke ellers hurtigt bliver fyldt op?

Desuden, så er koden jo lavet ved "trial and error", hvilket vil sige, der
er ingen synlige fejl (ser ud til at virke i både IE og FF) - men logisk
opbygget er den til gengæld nok ikke;-)

Optimering: Der kaldes jo læsaffil hvert 1/4 sekund, og hele filen læses, og
DIVen opdateres. I stedet vil jeg nok lave, som én foreslog, at man checker,
om filen er opdateret først, og hvis ikke, så lade være med at opdatere
DIVen.

MVH
Rune Jensen
Stig Johansen (26.12.2007, 09:19)
Rune Jensen wrote:

> "Stig Johansen" skrev...
> <SNIP>
>> Men her er et par ting, jeg har fundet ud af indtil videre (du må selv
>> finde
>> stederne, jeg har mistet overblikket).

> Jeg har nu kigget på det en 4 timers tid, og der er fremskridt


Lyder godt. Jeg havde sat mig for at 'huske' hvad jeg havde rettet - men
tror du jeg noterede det undervejs? Næh rigtige mænd skriver da ikke ned -
de glemmer. Jeg kunne simpelthen ikke finde ud af hvad der var 'dit' og
hvad der var 'mit'

>> * Et eller andet sted har brugt Text i stedet for Tekst - eller omvendt.

> Stavefejl. Er rettet


Yep, men i min version var det rettet, så jeg kunne ikke finde den igen.

>> * Du har glemt "id" et sted, der var kun "name"

> Er rettet


Godt - svaret var af samme årsag som overfor.

>> * url'er skal være absolutte, altså incl http:// osv.

> Jeg fik det til at virke med relative URLs. Men er der en særlig grund
> til, man anbefaler absolut URL?


Undskyld - Rune, det var ikke en anbefaling, det var 'the easy way out for
mig' - det var for at udelukke en fejlkilde, så kunne vi altid tage den
relative senere.

>>> * GET af .txt filen giver en 304 Not modified, så vi skal bruge

>> høkertrikket, jeg har brugt:
>> <body onload="HentFil('http://runejensen.dk/shoutbox.txt?dummy='+Math.random());"

> Der er udvidet lidt med en timer.


Pas lidt på når du laver timere, altså hvis du vil have 'Linuxfolket' med.
Der er et lille 'problem' med Linux. Her regner man i sekunder og
mikrosekunder og ikke millisekunder. Jeg har ikke lige mine kildetekster
(Ej javascript, men problemstillingen er det samme) ved hånden.
Det er noget med heltal(integers) og division med 1000.
Som heltal er 250/1000 = 0.
Du har 250 millisekunder, og min Konqueror går i 'infinite' loop -
garanteret pga denne fejl.
Så mit råd er til dig - og andre - gå aldrig under 1000 millisekunder -
heller ikke ved low level socket programmering - 'Linger' comes to my mind.

> Både dig og Birger er geniaaaale - bliv endelig ved;-)


Jeg
kan ikke tale for Birger, men jeg er ikke genial, jeg har bare prøvet nogle
ting hist og pist.

> Det ser ud til at virke efter hensigten nu. To ting irriterer, dog:
> 1. Jeg har stadig ikke fattet forskellen på synkron/asynkron og get/post i
> AJAX


Det er en svær en at gøre pædagogisk, jeg er sikker Birger kender til
Blocked vs Non-blocked I/O, så det kan være han også lige kan byde ind.
Jeg prøver denne her:
Der var engang ham her Rune.
Han har lyst til at lave æbleskiver til sine venner her til jul.
Men han bliver nødt til at ringe til sin mor, for det er hende der har
opskriften.
Man kan så lave 2 udfaldsrum på historien.
1) Rune starter med at ringe til sin mor, og kan ikke komme videre i
æbleskiveprojektet før han har opskriften osv. Han vælger derfor at blive
hængende i røret mens mor finder opskriften og læser den op for ham.
2) Rune ved at han skal bruge æbleskivepande, skåle osv, men han kender ikke
den præcise opskrift. Men også her starter Rune med at ringe til sin mor,
men denne her gang siger Rune - 'Jeg skal bruge din berømte opskrift på
æbleskiver, gider du finde den og ringe tilbage?'. Mens Rune venter på
tilbagemelding fra moren,går Rune i gang med at finde grej frem, så han er
klar når moren ringer tilbage.

Uanset om det er udfalsdrum 1 eller 2 er Rune afhængig af *opskriften*.
Forskelle er, at i tilfælde 2 udnytter Rune sin 'tid' mens han venter.

Altså lidt oversat: Udfald 1 = synkron, og Udfald 2= Asynkron.

Valget af metode går groft sagt ud på om 'man har noget at lave i
mellemtiden'.

> 2. Den dér math/høkertricket... Det må jeg lige kigge på. Jeg synes, jeg
> er kommet udom det før, men godt nok ikke med JS. Kan man få JS til at
> Flushe cashen? Jeg tænker på, om cashen ikke ellers hurtigt bliver fyldt
> op?


Der er (nu) 2 ting med 'høkertricket'.
1) Minimum requesten burde være at tjekke for opdatering, som egentlig
'bare' er en datosammenligning. Men vores kære ven MS har en - desværre -
standardindstilling, hvor der _ikke_ tjekkes _hver_ gang, men blot ukritisk
bruger cachen. Det er en browserindstilling hos brugeren, som du ikke kan
påvirke på nogen måde. Og jo, det *er* en lorteløsning, fordi hvert opslag
udvider cachen, men 'Herrens og Williams veje er uransagelige'.

Den anden, som er tilfældet her er, at det er din server, der returnerer
'NOT modified". Det kan ligeså godt være min Konqueror, der ikke sender en
'rigtig' request, men jeg *orkede* ikke at sætte monitorering op, så det
var nok også lidt 'the easy way out for mig'.

> Optimering: Der kaldes jo læsaffil hvert 1/4 sekund


Pas lidt på med 1/4 sekund jfr. ovenstående - men også af hensyn til din
serverload.
Birger (27.12.2007, 12:23)
"Rune Jensen" <runeofdenmark> skrev i en meddelelse
news:7185
[..]
> igen!"
> - Kim Schumacker, Studie 88
> [..]


Et par småting, her torsdag morgen.

I DoSend() har du :
req.onreadystatechange = TextSent;
req.open( 'post', 'shoutbox_update.asp?' + ptext , true);
og den går ikke.
open() initialiserer objectet, og _skal_ være det første der kaldes. De to
linier skal derfor byttes om.

Desuden er der noget principielt der er forkert - kan så ikke lige overskue
hvor og hvorfor.

I DoSend, genbruger du req (AJAX_objectet).
Det er fint nok, men ambitiøst, da du ikke kan være sikker på at det er
færdigt med det, det er i gang med, fordi du bruger asynkron kommunikation.

Når du bruger asynkron kommunikation, fortsætter scriptet efter send() er
kaldt.
Det er derfor muligt, at du starter en ny kommunikation, inden den første er
forbi. Hvis det skal gå godt, er du nødt til at oprette et nyt object, eller
afbryde den igangværende, eller på anden vis være sikker på at objectet ikke
bruges længere (readyState skal være 4, og callback funktionen kaldt). Det
samme object kan ikke håndtere 2 kommunikationer på een gang.
Det kan så være at timingen i det hele er sådan at det ikke sker hos dig -
men en bruger med kortere eller længere responsetider kan få problemer du
aldrig ser.
Et alternativ er at bruge synkron kommunikation. Det stopper afviklingen af
script, indtil kommunikationen er slut.
Problemet ved det er, at det også stopper anden funktionalitet i browseren.
Man kan altså f.eks. ikke indtaste noget, mens kommunikationen er i gang.

Du bruger også det samme object til både at sende og hente beskeder.
Principielt kan du godt risikere, at der bliver byttet om på reponses fra
din ASP, hvis en besøgende sender en meddelelse, samtidig med at systemet
henter nye meddelelser.

Birger
-----
[..]
Rune Jensen (27.12.2007, 14:53)
"Birger" skrev...

> Et par småting, her torsdag morgen.
> I DoSend() har du :
> req.onreadystatechange = TextSent;
> req.open( 'post', 'shoutbox_update.asp?' + ptext , true);
> og den går ikke.
> open() initialiserer objectet, og _skal_ være det første der kaldes. De to
> linier skal derfor byttes om.


er gjort

> Desuden er der noget principielt der er forkert - kan så ikke lige
> overskue hvor og hvorfor.


Layoutet er lavet lidt pænere, så det er nemmere at overskue

> I DoSend, genbruger du req (AJAX_objectet).
> Det er fint nok, men ambitiøst, da du ikke kan være sikker på at det er
> færdigt med det, det er i gang med, fordi du bruger asynkron
> kommunikation.


Jeg har forsøgt at lave nyt object til send. Nu virker send ikke;-)

> Du bruger også det samme object til både at sende og hente beskeder.
> Principielt kan du godt risikere, at der bliver byttet om på reponses fra
> din ASP, hvis en besøgende sender en meddelelse, samtidig med at systemet
> henter nye meddelelser.


Der skal være to objecter, som jeg har forstået det, et til hent, et til
gem. Problemet er, den ikke vil acceptere mit nye object. Som det er i
øjeblikket, bliver der ikke gemt, fordi det nye object reqs er null - selvom
det skulle være initialiseret.

Jeg kan ikke se fejlen umiddelbart.

Kigger lige på det igen her efter frokot.

MVH
Rune Jensen
Birger (27.12.2007, 15:11)
"Rune Jensen" <runeofdenmark> skrev i en meddelelse
news:7185
[..]
> selvom det skulle være initialiseret.
> Jeg kan ikke se fejlen umiddelbart.
> Kigger lige på det igen her efter frokot.
>> MVH

> Rune Jensen


Det eneste jeg kan se, er at du sender data med både i URL og i reqs.send(
'ptext').
Når du bruger get og sætter data i send(), bliver de data tilføjet til
URL'en med et ? foran.
Din ASP får dermed dobbelte data - og det er vel der tingene går galt?

Der er i øvrigt scriptfejl i både TextSent() og AJAXDone() (linierne 164 og
213) - element asp er ikke defineret.

Birger
-----
[..]
Rune Jensen (27.12.2007, 15:39)
"Birger" skrev...

> Det eneste jeg kan se, er at du sender data med både i URL og i
> reqs.send( 'ptext').
> Når du bruger get og sætter data i send(), bliver de data tilføjet til
> URL'en med et ? foran.
> Din ASP får dermed dobbelte data - og det er vel der tingene går galt?
> Der er i øvrigt scriptfejl i både TextSent() og AJAXDone() (linierne 164
> og 213) - element asp er ikke defineret.


rettet og virker... Tak, Birger. Det løste også et par andre problemer.

MVH
Rune Jensen
Rune Jensen (27.12.2007, 20:49)
"Birger" skrev...

> I DoSend, genbruger du req (AJAX_objectet).
> Det er fint nok, men ambitiøst, da du ikke kan være sikker på at det er
> færdigt med det, det er i gang med, fordi du bruger asynkron
> kommunikation.


Jeg er lidt i tvivl her. Må man så ikke lave det som jeg har gjort med en
variabel til funktionen for at kalde forsk. filer? Jeg bruger den godt nok
kun til at hente chattext, men ville være smart, om den kunne udnyttes til
brugere online også.

For som det er nu, så laver jeg helt separate dele for hver del, og det
bliver immervæk nogle gentagelser, når der er oprettelse af og check af
objecter med videre (næsten samme kode) til 4 forsk. ting, hent fil
(chattext), gemfil (gem chatttext), hentbrugereonline, og så den sidste som
jo så skal laves for opdatering af brugere (også en gem fil)

Er der slet ikke noget, som kan optimeres???

MVH
Rune Jensen
Birger (27.12.2007, 21:49)
"Rune Jensen" <runeofdenmark> skrev i en meddelelse
news:7185
[..]
> objecter med videre (næsten samme kode) til 4 forsk. ting, hent fil
> (chattext), gemfil (gem chatttext), hentbrugereonline, og så den sidste
> som jo så skal laves for opdatering af brugere (også en gem fil)
> Er der slet ikke noget, som kan optimeres???
>> MVH

> Rune Jensen


Jo, optimeres kan det da.
F.eks.
function makeReqObj() {
areq = null;
.... // resten din eksisterende kode
return areq;
}

De to ( tre?) steder du opretter objecter skriver du så bare
req = makeReqObj(); og
reqs = makeReqObj();
reqsu = makeReqObj();

Så har du kun een funktion, der generer AJAX objecter - og kan genbruges så
meget du har lyst til ;>)

Og en funktion, f.eks.
function CheckAjax( ajaxObj, CallOnOk) {
if ( ajaxObj.readyState == 4) {
if ( ajaxObj.status != 200) {
alert( 'Fejl ved AJAX request : Status '+ajaxObj.status+' returneret.');
}
else {
if ( CallOnOk) { CallOnOk( ajaxObj.responseText) };
}
}

kan kombineres med alle dine callback, så den del af koden også kun er
nødvendig een gang.
F.eks. i din HentFil()
....
if ( nav.indexOf( 'Netscape') > -1) {
req.onload = function( ) { CheckAjax( req, AJAXDone); };
}
else {
req.onreadystatechange = function( ) { CheckAjax( req, AJAXDone); };
}
....
hvor checket for kommunikationen er taget ud, og teksten overføres som
parameter.
- så din AJAXDone ser sådan ud:
function AJAXDone( aTxt) {
document.getElementById('asp').innerHTML = aTxt;
switchTime();
scrollToBottom();
}

Skal så lige sige, at den sidste har drillet mig lidt, da jeg forsøgte.
Havde heller ikke rigtigt brug for det, så jeg gik ikke i dybden med
hvorfor - og jeg havde nogle andre fejl samtidig...

Du kan sætte de to (tre?) funktioner der kalder AJAX sammen til een, og
overføre parametre til dem som parametre til funktionen.
Altså Ajaxobject, url, data og callback funktion.
F.eks.:
function DoAjax( aObj, url, data, callBack) {
aObj = makeReqObj();
if ( aObj != null) {
aObj.open( 'get', url, true);
aObj.setRequestHeader( 'Content-Type',
'application/x-www-form-urlencoded');
aObj.setRequestHeader( 'Accept-Charset', 'iso-8859-1, utf-8');
aObj.setRequestHeader( 'Accept-Language', 'da');
nav = window.navigator.appName;

if ( nav.indexOf( 'Netscape') > -1) {
req.onload = function( ) { CheckAjax( aObj, callBack); };
}
else {
req.onreadystatechange = function( ) { CheckAjax( aObj, callBack); };
}

aObj.send(data);
}
}

For f.eks. at hente filen (meddelelserne) bruger du så
DoAjax( req, '/shoutbox.txt', 'dummy='+Math.random(), AJAXDone);
hente brugere
DoAjax( reqsu, '/shoutboxusers.txt','dummy='+Math.random(), AJAXDoneSU);
for den sidste, skal du selvfølgelig rette AJAXDoneSU til på samme måde som
AJAXDone ovenfor...

Håber det er forståeligt ;>)

Birger
-----
[..]
Stig Johansen (28.12.2007, 07:26)
Rune Jensen wrote:
[snip]

Jeg har ikke lige kunnet finde et sted at placere indlægget, så jeg lægger
det her.

Birger har redegjort for asynkron hentning m.v.
Men du har en yderligere udfordring i forhold til din timer.

Nede i din timer funktion har du:
HentFil('/shoutbox.txt?dummy='+Math.random());
HentFilUsers('/shoutboxusers.txt?dummy='+Math.random());
umiddelbart herefter starter du en ny timer.

Udfordringen er, at dine 'Hent' kun _igangsætter_ forespørgslerne.

Det betyder, at din 'effektive' timer Te = T - R , hvor T er dit interval,
og R er responsetiden.
vi sætter T til 1000.
Det betyder for R eksempelvis:
R = 250 => Te = 750
R = 500 => Te = 500
R = 750 => Te = 250
R = 1000 => Te = 0
R = 1250 => Te = -250
Hvis Te < 0 får du igangsat nye forespørgsler inden de forrige er færdige.

Du må sel 'fedte' lidt med strukturen, men humlen er at du først bør
aktivere timeren når readystate = 4 på 'alle' udestående requests.

HOV! - vent lige lidt, jeg kommer lige pludselig i tanker om, at det kan
meget vel være _det_, der skete i min Konqueror.

Jeg bruger primært min yndlingsmaskine - 350 MHz fra sidste årtusinde, så
det meget vel tænkes, at den er 'meget' længere en 1/4 sekund om at
opdatere skærmen. Det er med andre ord muligt, at vi skal lave en 'undo' på
min kommentar om afrunding til 0. Den oplevelse jeg havde med 0'et var en
given implementering af sockets (Til Birger: = Synapse/Kylix), og gælder
ikke Linux generelt.
Rune Jensen (28.12.2007, 15:44)
"Stig Johansen" ...

> Du må sel 'fedte' lidt med strukturen, men humlen er at du først bør
> aktivere timeren når readystate = 4 på 'alle' udestående requests.


Timeren var nok det sidste jeg tænkte på som egentligt problem;-) Mon det
kan kombineres et check af readystate og så Birgers forslag til forennkling
af koden - den vil jeg kigge på.

> HOV! - vent lige lidt, jeg kommer lige pludselig i tanker om, at det kan
> meget vel være _det_, der skete i min Konqueror.


I FF, så blinker boksen med brugere online. Måske er dette en årsag.

> Jeg bruger primært min yndlingsmaskine - 350 MHz fra sidste årtusinde, så
> det meget vel tænkes, at den er 'meget' længere en 1/4 sekund om at
> opdatere skærmen. Det er med andre ord muligt, at vi skal lave en 'undo'
> på
> min kommentar om afrunding til 0. Den oplevelse jeg havde med 0'et var en
> given implementering af sockets (Til Birger: = Synapse/Kylix), og gælder
> ikke Linux generelt.


Jeg laver en undo på teksten på hjemmesiden. Og så kigger jeg på
timer-problemet, når jeg kommer hjem.

Noget helt andet, det er selve chatboksen, den må ikke scrolle til bund,
hvis musen er over denne. Har forsøgt med mouseover og mouseout, men dels er
det jo netop ikke sikkert, eventen er indtrådt på f.eks. mouseout, dels
svarer ingen af dem helt til mine ønsker, eller er faktisk det modsatte af
en mouseevent.

Funktion Check om musen hover over chatboksen med id=asp
hvis dette IKKE er tilfældet
scroll til bunden af boksen med id=asp
end hvis
end check

....meningen er selvfølgelig en mulighed for at læse tilbage i chatten uden
at blive afbrudt af irriterende scroll-down hvert sekund.

Tak for hjælpen til jer begge. Meget af det ville jeg nok ikke kunne løse
ved at kigge på nettet alene;-)

MVH
Rune Jensen
Birger (28.12.2007, 16:12)
"Rune Jensen" <runeofdenmark> skrev i en meddelelse
news:7185

8X

[..]
> end check
> ...meningen er selvfølgelig en mulighed for at læse tilbage i chatten uden
> at blive afbrudt af irriterende scroll-down hvert sekund. 8X


Faktisk gør timeren at det er umuligt at scrolle op og vise indhold før det
der er synligt, og det kan være ret irriterende.
Faktisk kunne man argumentere for, at du slet ikke skal hente noget, hvis
musen er over feltet (eller det ikke er scrollet i bund), da den besøgende
ikke vil kunne se det alligevel.

Tror det er nemmere at have en boolean du sætter false ved mouseover og true
ved mouseout på elementet, end det er at finde ud af om musen er over et
givet element lige på det aktuelle tidspunkt - og bruge den boolean til at
afgøre om der må scrolles eller ej.

var allowScroll = true;
....
if (allowScroll) { scrollToBottom( document.getElementById( 'asp')); }
....

<div id="asp" onmouseout="allowScroll=false;"
onmouseout="allowScroll=true;">...</div>

Birger
-----
[..]

Lignende emner