JavaScript - Objects - window - Open/Close - Slip Hugo fri
> onClick(), onMouseOut()

Med onClick="window.open()" kan alle elementer - fx et billede - fungere som link til en anden side, som åbnes i et nyt vindue:

<img SRC="hugo.gif" ALT="Slip Hugo fri" Border="0" WIDTH="48" HEIGHT="75"
onClick="window.open('hugo.htm','results','width=314,height=298')">
Slip Hugo fri

Det nye vindue kan fx lukkes igen med onMouseOut=window.close():

<img SRC="hugo.gif" ALT="Slip Hugo fri" Border="0" WIDTH="48" HEIGHT="75"
onClick="w = window.open('hugo.htm','results','width=314,height=298')"
onMouseOut="w.close()">
Slip Hugo fri

NB: når onClick() - som i eksemplerne herover - blot er indlejret i elementet, kan man ikke umiddelbart se, at det fungerer som link - der mangler en 'hånd', når musen peger på elementet.

Hvis onClick() lægges ind i en <a HREF="...">kode, får man et link, som ligner alle andre links - med 'hånd' - men her kan der opstå nogle problemer, som kan løses på forskellige måder:


Følgende model med et dummy bogmærke ("#") benyttes ofte - klik på Hugo:

<a HREF="#" 
   onClick="window.open('hugo.htm','results','width=314,height=298')">
  <img SRC="hugo.gif" ALT="Slip Hugo fri" Border="0" width="48" height="75">
</a>
Slip Hugo fri

Det virker fint - i toppen af websiden. Når det nye vindue lukkes vender vi med denne kode altid tilbage til toppen af websiden - og det var måske ikke meningen, hvis vi befinder os længere nede på siden.
I bunden af denne side er anbragt en kopi af koden - prøv den og se virkningen.


En halv løsning er følgende link, som godt nok vender tilbage til det samme sted på siden:

<a NAME="#1" HREF="#1" 
   onClick="window.open('hugo.htm','results','width=314,height=298')">
  <img SRC="hugo.gif" ALT="Slip Hugo fri" Border="0" width="48" height="75">
</a>
Slip Hugo fri

- men bogmærket bliver altid anbragt øverst i vinduet - så billedet hopper ofte - ikke ideelt.


En anden løsning er JavaScript uden bogmærke - men her er et andet problem: et ekstra uønsket vindue:

<a HREF="JavaScript: 
   window.open('hugo.htm','results','width=314,height=298')">
 <img SRC="hugo.gif" ALT="Slip Hugo fri" 
      Border="0" width="48" height="75">
</a>
Slip Hugo fri

Problemet opstår, fordi metoden window.open() returnerer et objekt, som får <a HREF>koden til at åbne et ekstra vindue - foruden det vindue, der skal åbnes.


Det ekstra vindue fjernes med void, som bruges til at ignorere returnerede værdier:

<a HREF="JavaScript: 
   void window.open('hugo.htm','results','width=314,height=298')">
 <img SRC="hugo.gif" ALT="Slip Hugo fri" 
      Border="0" width="48" height="75">
</a>
Slip Hugo fri

Problemet kan også løses ved at pakke window.open() ind i en <script> sektion med en funktion - AabnVindue() - som ikke returnerer noget (ingen return ).

<script LANGUAGE="JavaScript">

function AabnVindue()
{ window.open("hugo.htm", "results", "width=314, height=298")} 

</script>

Denne kode kan kaldes i et link:

<a HREF="JavaScript: AabnVindue()">
   <img SRC="hugo.gif" ALT="Slip Hugo fri" 
    Border="0" width="48" height="75">
</a>
Slip Hugo fri

Hvis det objekt, som window.open() returnerer, skal bruges senere, kan objektet gemmes i en variabel
w = window.open()
Herefter kan man fx lukke det åbnede vindue med
w.close().

Men w = window.open() returnerer også et objekt, som med HREF starter et ekstra, uønsket vindue.
I dette tilfælde skal void benyttes på denne måde: void (w = window.open())

Her lukkes vinduet igen, når musen fjernes fra det lille billede:

<a HREF="JavaScript: 
   void (w = window.open('hugo.htm','results','width=314,height=298'))">
   <img SRC="hugo.gif" ALT="Slip Hugo fri" 
    Border="0" width="48" height="75"
    onMouseOut="w.close()">
</a>
Slip Hugo fri

Kopi af koden i toppen af denne side - klik på Hugo - når det nye vindue lukkes, vender vi ikke tilbage hertil - men til toppen afdokumentet, fordi dummy-bogmærket ("#") ikke findes.

<a HREF="#" 
   onClick="window.open('hugo.htm','results','width=314,height=298')">
  <img SRC="hugo.gif" ALT="Slip Hugo fri" Border="0" width="48" height="75">
</a>
Slip Hugo fri