Avatar billede asterisk Nybegynder
05. maj 2004 - 01:06 Der er 24 kommentarer og
1 løsning

Luk et vindue ved klik udenfor, men ikke også indenfor det

Jeg har en situation, hvor jeg har lavet en række links (som ikke er buttons men almindelige links)i et dokument. Hvert link skal åbne et lille vindue med nogle supplerende oplysninger ang. dette link.
Når man klikker på det næste link i rækken, skal det gamle lille vindue lukkes automatisk, og efterfølgende skal det erstattes med det nye vindue med sit relevante indhold.
Denne facon finder jeg meget brugervenligt i den tilfælde når en længere række links skal alle give nogle ekstra informationer som brugerne selv må bestemme om de vil se dem eller ej. De kan klikke og åbne så mange vinduer som de vil, uden at gøre sig den ulejlighed at bagefter at skulle lukke dem én efter én.
For at opnå denne funktion, har jeg brugt følgende velkendte kode:

<body onblur="window.close()">,

Og det virkede uden problemer.
MEN!
Så fik jeg pludselig behov for at indholdet i det lille vindue også skal kunne printes.
Og DET var umuligt, fordi det lille vindue lukkes automatisk også når man klikker (eller højreklikker) i det selv!

Er der nogen der kan få det lille vindue til at blive på skærmen når man foretager sig handlinger i det selv? Fx i mit tilfælde skal det ikke lukkes ved klik på print ikonet som jeg har sat op i det.
Det skal dog stadig lukkes ved klik uden for det.
Avatar billede roenving Novice
05. maj 2004 - 01:19 #1
I dine popup-vinduer:

<script type="text/javascript">var closeTimer = 0;</script>

<body onblur="closeTimer=setTimeout('self.close()',50);">

-- og dit print-ikon:

<img src="print.gif" onclick="clearTimeout(closeTimer);self.print()">

-- og jeg har brugt en forsinkelse på 50 ms., der burde ikke være et egentligt behov for at gå højere end omkring 1 millisekund, men det er helt ufarligt med en 20.-del sekund !-)
Avatar billede asterisk Nybegynder
05. maj 2004 - 01:58 #2
Jeg gjorde som du sagde...<script..>..</script> kom ind i headeren, men du må selv se:

<script type="text/javascript">var closeTimer = 0;</script>
</head>

<body onblur="closeTimer=setTimeout('self.close()',50);" bgcolor="#E9EADF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">

samt:

<a href="#" class="text"><img src="../../img/print.gif" width="18" height="19" border="0"  onclick="clearTimeout(closeTimer);self.print()">Printervenlig
        version</a>


Men hvorfor virker det ikke? Vinduet forsvinder i samme øjeblik når jeg klikker. Og prineren går ikke i gang.

Det samme sker når jeg flytter onclick til <a> taget, altså:

<a href="#" class="text" onclick="clearTimeout(closeTimer);self.print()"><img src="../../img/print.gif" width="18" height="19" border="0">Printervenlig
        version</a>

Har du et bud på hvad jeg har gjort forkert?
Avatar billede roenving Novice
05. maj 2004 - 02:06 #3
Hvis du sætter et a-tag omkring skal onclick selvfølgelig på linket ...

-- du kan selvfølgelig prøve at sætte de 50 til et længere stykke tid (helt op omkring ½ sekund = 500 vil næppe genere !-)

Men det skulle ikke betyde noget ?-)

-- har du evt. flere body-tags eller lignende ?o]
Avatar billede asterisk Nybegynder
05. maj 2004 - 02:45 #4
Nej, jeg har ikke flere body tags.
100 milisec. gjorde ikke forskel.

500 virkede og åbnede printeren, men først når jeg klikker på Print i det første åbnede vindue. Men hvis jeg klikker på den næste link uden at jeg bruger Printeren i det første, så får jeg følgende error prompt:
"The callee(server[not server application])is not available and disappeared; all connections are invalid. The call did not execute."
Min debugger henviser så til den anden linje i den næste kode i hovedvinduet:

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features); ----> det er denne linje der blev gult.

Ja, så var jeg flittig at prøve med 300.
Og det lykkedes!

Hvad gør jeg for at give dig de points?
Avatar billede asterisk Nybegynder
05. maj 2004 - 02:47 #5
Og ja, hvad er det der bestemmer at det skal være 300 milisec?
Avatar billede roenving Novice
05. maj 2004 - 02:48 #6
Den fejlmeddelelse er også den jeg får når min popup-stopper dræber en soft popup, altså en, jeg selv har bedt om ...

-- og point kan du give mig, når jeg nu har svaret !-)

Velbekomme '-)
Avatar billede roenving Novice
05. maj 2004 - 02:51 #7
Tidan kan måske have en sammenhæng med, at browseren skal kalde et andet program for at bliver serviceret af det, men jeg er absolut ikke sikker ...

Bruger du samme winName til alle vinduer ?-)

-- for browserne har det med at tage den slags alvorligt, så der måske er en rest af den forekomst af et browser-vindue tilbage, så det måske forårsager fejlen ?o]
Avatar billede asterisk Nybegynder
05. maj 2004 - 03:01 #8
Ja, jeg bruger i dette tilfælde det samme navn til alle vinduerne.
Det stammer fra dengang jeg har forsøgt mig med flere forskellige metoder. Når jeg brugte forskellige navne, så kom mange vinduer til at åbnes dengang jeg ikke havde begyndt med onblur="window.close()"
Nu vil jeg også eksperimentere med forskellige navne igen, for at se om det kan gå med færre milisec.
1000 tak for din hjælp!
Avatar billede roenving Novice
05. maj 2004 - 03:03 #9
Ja, jeg ville nok umiddelbart anbefale, at man genbrugte vinduerne, altså brugte samme winName, men jeg kan ikke gennemskue en fejlkilde derudfra ...
Avatar billede asterisk Nybegynder
05. maj 2004 - 03:09 #10
Ja, dette ville kræve en ordentlig gennemgang af hele koden på sitet for at finde fejl, men jeg vil nøjes denne gang med din framragende løsning, og jeg håber pointsene er hjemme
;-)
Avatar billede roenving Novice
05. maj 2004 - 03:11 #11
Måske har du ikke markeret navn, for point uddeles kun, når der er et markeret navn i boksen til venstre !-)
Avatar billede asterisk Nybegynder
05. maj 2004 - 03:12 #12
Nu må den være der?
Avatar billede asterisk Nybegynder
05. maj 2004 - 03:13 #13
Jeg tror faktisk at flere undlader at sende points, pga de ikke kan finde ud af det.
Avatar billede roenving Novice
05. maj 2004 - 03:16 #14
Det er faktisk en ændring i denne udgave af Eksperten, for i gamle dage var der en del tilfælde, hvor det nærmest var en tilfældig, som fik point, da de automatisk blev uddelt, når der kun var en som havde lagt svar ...

-- det var jo nærmest en opfordring til at lægge en ligegyldig kommentar som svar, hvis man havde brug for at samle nogen sammmen !-)
Avatar billede roenving Novice
05. maj 2004 - 03:16 #15
-- og tak for point ;~}
Avatar billede olebole Juniormester
05. maj 2004 - 13:34 #16
<ole>

Hvis du bare giver alle dine popup-vinduer det samme navn (andet argument i en window.open()), vil du kun åbne ét vindue:

function myOpen(url) {
  var myWin = window.open(url, "win", "width=350,height=175");
  myWin.focus();
}

<a href="http://www.google.dk" onclick="myOpen(this.href)">Test 1</a><br>
<a href="http://www.yahoo.dk" onclick="myOpen(this.href)">Test 2</a><br>

/mvh
</bole>
Avatar billede olebole Juniormester
05. maj 2004 - 13:35 #17
Oooops ... og selvfølgelig returnere false:

<a href="http://www.google.dk" onclick="myOpen(this.href);return false">Test 1</a><br>
<a href="http://www.yahoo.dk" onclick="myOpen(this.href);return false">Test 2</a><br>
Avatar billede roenving Novice
05. maj 2004 - 19:03 #18
>>olebole *lol*

-- den tråd havde du vist ikke læst så grundigt igennem ...
Avatar billede asterisk Nybegynder
08. maj 2004 - 01:26 #19
>>roenving + andre der gider læse ligeså grundigt ;-)

Jeg vender lige tilbage igen.
Din kode virkede perfekt hos mig og den gør det stadig. Men jeg har opdaget med tiden, at den kan finde på at være ustabil.
Som jeg sagde d. 05/05-2004 02:45:17, brugte jeg en forsinkelse på 300 ms. Men det ser ud som om det næsten kun er min PC hvor koden virker. Både lokalt og hentet fra en remote server. Hos 3 ud af 4 af mine testpersoner, virkede den ikke tilfredsstillende. De kan sagtens bruge Print i popupen, men popupen "gemmer" sig under hovedvinduet ved klik på næste link i hovedvinduet. Indholdet skifter stadig i det som response til de clicks som man foretager sig på linksne i hovedvinduet. Men det (popup) forbliver gemt under hovedvinduet, og kommer ikke frem indtil men ikke kalder det fra processlinjen. Brugerne tror ikke at der sker noget når de klikker, de siger "Jeg klikker, men der sker ikke noget, der er ikke nogen vinduer".
Ifølge usability eksperter er det en katastrofesituation.

Jeg legede så lidt med forsinkelsestiderne med testpersonen i tlf. Og det er resultater:
- Udover de 300 ms - giver ikke nogen ændringer.Popupsne gemmer sig stadig under hovedvinduet.
- På 90 ms og mindre, virker det som ved almindelig <body onblur="window.close()">, altså popupen forsvinder ved klik på Printikonet i det.

Vinduet er også ustabil i denne situation:
Jeg klikker på første link som åbner popupen. Inden jeg venter på at popupen kommer frem på skærmen, klikker jeg flere gange hurtigt i træk på det næste af linksne. I denne situation kan komme fx en hurtig og utålmodig bruger, som har fortrydt sin første klik og uden at vente nok for at popupen nåede at åbnes, klikker nu videre på det næste link flere gange utålmodig i sin forsøg på at åbne en anden popup i stedet for. I denne situation "taber" man undervejs popupen "på gulvet", altså det kommer til at gemme sig bag hovedvinduet, og bliver der.

Er der nogen løsninger på dette problem, er der en metode som kan gøre vinduet stabil og uafhængig af system performance?

Kan man uddele points videre her, (giver 30 igen hvis der er nogen løsning), eller skal jeg oprette nyt Spørgsmål for at kunne udgive points?
Avatar billede asterisk Nybegynder
08. maj 2004 - 12:10 #20
Ok, der er åbenbart ingen der har set mit spm, derfor vil jeg oprette det som nyt.
Avatar billede olebole Juniormester
09. maj 2004 - 17:15 #21
roenving >> Jo, jeg havde _netop_ læst spørgsmålet grundigt igennem - og den løsning, brugeren er ude i, vil meget let skabe problemer (timeouts kan ofte være vanskelige at styre). Derfor gav jeg den anden løsning, som er enklere - og altid vil fungere  ;o)

Jeg prøver at kommentere det nye spm  :)
/mvh
Avatar billede roenving Novice
09. maj 2004 - 17:20 #22
Også 05/05-2004 03:01:24 ?-)
Avatar billede asterisk Nybegynder
09. maj 2004 - 21:18 #23
Jeg kan godt lide jeres begge løsninger ->roenvings fordi den er så genial i sin selvoprydning - den forsvinder af sig selv når brugeren går videre. Sådan har jeg også tænkt det skulle være.
Siden har jeg brugt flere dage for at finde den forsinkelses grænseverdi, hvor både vinduets placering onFocus er stabil og printeren er til at bruge.
Men der sker nogle mystiske ting i forsøg på at gennemføre den idé, nogle gange virker det hele perfekt med fx 100 ms, og det virker 4-5 første forsøg. Men så pludselig, ligesom vinduet bliver "træt" - gider det ikke mere!(??), og begynder at forsvinde når man klikker på Print.
I så tilfælde hjælper kun en "chock terapi" med de 300 ms. OK! Med de 300 ms er vinduet "tam nok" når man klikker på printeren, men er bare så dårlig til at blive onFocus når man hurtig skifter linksne flere gange i træk. Den gemmer sig og lever sit eget liv under overfladen.

->oleboles vindue kan jeg godt lige pga stabiliteten. Det er bare sej og jeg har pludselig fået en desperat tanke om man ikke kunne forlige de to genielle løsninger -lave en kombination med onFocus og timing.
Jeg er amatør og ved ikke om det er muligt, men hvad siger eksperterne?
(Håber bare ikke I dør af grin).

//for at være sikker på at alle læser det her, vil jeg foreslå at vi fortsætter på mit nyoprettede spm/497379, og vil kopiere denne komentar dertil.
Avatar billede asterisk Nybegynder
10. maj 2004 - 00:10 #24
Avatar billede grace45 Nybegynder
25. oktober 2010 - 12:11 #25
Hej min kære,
Hvordan har du i dag, jeg håber, at alle er godt med dig. Jeg er ked af at bekymre dig med min Forslag til et forhold med dig, men jeg ved, at du vil imødekomme min anmodning i god tro og forståelse. Jeg har brug for dig i forretningsbetingelser og rådgive. Mit navn er Grace Dabah jeg bare gik gennem din profil har ingen andre muligheder end at lade dig vide, at jeg er interesseret i at have et forhold med dig, vil jeg også gerne vide dig mere, kan du sende en mail til min e-mail adresse (grace_11dabah @ yahoo.com), så jeg kan sende dig flere oplysninger om mig selv inklusive mit billede. Jeg tror, vi kan gå herfra. Men huske på, at kærlighed ikke har nogen farver barriere, ingen uddannelsesmæssige tilbage jorden barriere, ingen socio-økonomiske barrierer, religiøse, sprog, nationalitet eller afstand hindring, det eneste vigtige der er kærlighed. Jeg venter på din mail til min e-mail adresse ovenfor.
Med venlig hilsen,
Miss Grace.
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