Avatar billede mik789 Nybegynder
12. februar 2003 - 23:30 Der er 24 kommentarer og
1 løsning

funktion "not defined"

Jeg har en side hvor man kan åbne et popup vindue, "bibliografi", der kan åbnes igen og igen med nyt indhold alt efter linket, der åbner det. Jeg har så en funktion der "rytter op", så når man forlader siden, lukkes det åbnede vindue samtidig. Funktionen er simpel:

function dependWin() {
  if (self.bibliografi&&!bibliografi.closed) bibliografi.close();
}

Det virker også efter hensigten, men når jeg så kigger efter i Netscapes javascript console melder den om flg fejl hvis siden forlades uden at vinduet er eller har været åbent:

dependWin is not defined

Hvis vinduet er åbent, meldes der ingen fejl (og vinduet lukker som det skal).

Men hvorfor overhovedet en fejl? For det første: hvorfor opfattes funktionen dependWin() som en variabel, dependWin ? Og for det andet: hvad skal der til for at denne ikke er "not defined"? Jeg har forsøgt at udvide funktionen med et alternativ der tildeler en værdi til dependWin i stil med:

function dependWin() {
  if (self.bibliografi&&!bibliografi.closed) {  bibliografi.close();
  } else {
  dependWin=1;
  }
}

Men er det egentlig ikke noget sludder? Under alle omstændigheder hjælper det ikke. Konsollen melder om samme fejl alligevel.

Men hvad ellers?

I kan se koden og siden i funktion på: www.dahr.dk/specialister.php

/mik
Avatar billede mik789 Nybegynder
12. februar 2003 - 23:32 #1
skulle selvfølgelig lige have med at funtionen kaldes fra <body> sådan:

onunload="dependWin();"
Avatar billede pelkjaer Nybegynder
12. februar 2003 - 23:38 #2
Hvorfor ikke blot

var bibliografi=0;
function bibliografiWindow(URL) { // Åbner bibliografi vindue
  if(bibliografi) {
    if(!bibliografi.closed) bibliografi.close();
  }
  bibliografi = window.open(URL, "bibliografi", "width=650,height=450,top=0,left="+leftPosition+",toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes");
  bibliografi.focus();
}
Avatar billede mik789 Nybegynder
12. februar 2003 - 23:49 #3
mener du:

var bibliografi=0;
function bibliografiWindow(URL) { // Åbner bibliografi vindue
  if(bibliografi) {
    if(!bibliografi.closed) bibliografi.close();
  } else {
  bibliografi = window.open(URL, "bibliografi", "width=650,height=450,top=0,left="+leftPosition+",toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes");
  bibliografi.focus();
  }
}

-------

dvs. også med en else sætning
Avatar billede mik789 Nybegynder
12. februar 2003 - 23:49 #4
prøver
Avatar billede olebole Juniormester
12. februar 2003 - 23:50 #5
<ole>

var bibliografi = new Object();
bibliografi.closed = true;
function bibliografiWindow(URL) { // Åbner bibliografi vindue
.... osv ....

/mvh
</bole>
Avatar billede pelkjaer Nybegynder
12. februar 2003 - 23:52 #6
Jeg mente nu lige som jeg skrev det.
Avatar billede mik789 Nybegynder
12. februar 2003 - 23:55 #7
Nu ser det sådan ud:

var bibliografi = new Object();
bibliografi.closed = true;
function bibliografiWindow(URL) { // Åbner bibliografi vindue
  if (self.bibliografi&&!bibliografi.closed) {
    bibliografi.location.href=URL;
    bibliografi.focus();
  } else {
    bibliografi = window.open(URL, "bibliografi", "width=650,height=450,top=0,left="+leftPosition+",toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes");
    bibliografi.focus();
  }
}

function dependWin() { // Lukker vinduet med bibliografi, når siden forlades
  if (self.bibliografi&&!bibliografi.closed) bibliografi.close();
}

-----

Men stadig væk siger den: dependWin is not defined
Avatar billede olebole Juniormester
12. februar 2003 - 23:56 #8
Det her virker fint:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/JavaScript">
leftPosition=0;
if (screen) {
  leftPosition = screen.width -670;
}

var bibliografi = new Object();
bibliografi.closed = true;
function bibliografiWindow(URL) { // Åbner bibliografi vindue
  if (self.bibliografi&&!bibliografi.closed) {
    bibliografi.location.href=URL;
    bibliografi.focus();
  } else {
    bibliografi = window.open(URL, "bibliografi", "width=650,height=450,top=0,left="+leftPosition+",toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes");
    bibliografi.focus();
  }
}

function dependWin() { // Lukker vinduet med bibliografi, når siden forlades
  if (self.bibliografi&&!bibliografi.closed) bibliografi.close();
}
</script>
</head>
<body onunload="dependWin();">

<a href="#" onclick="bibliografiWindow('http://www.google.com');return false;">jkæjækljn</a>

</body>
</html>
Avatar billede olebole Juniormester
12. februar 2003 - 23:58 #9
Og jeg går udfra, vi taler om NS6  :)
Avatar billede mik789 Nybegynder
13. februar 2003 - 00:02 #10
ole> ja, det gør vi. Men underligt nok, selv om jeg udvider scriptet som du siger, får jeg stadig den samme dumme fejlmeddelelse. Du kan selv tjekke på linket som er opdateret
Avatar billede mik789 Nybegynder
13. februar 2003 - 00:06 #11
ole> hvad er fidusen ved at have de to linjer som du foreslår? altså:

var bibliografi = new Object();
bibliografi.closed = true;
Avatar billede mik789 Nybegynder
13. februar 2003 - 00:14 #12
pelkjaer> sådan som du skriver funktionen er det kun den første funktion der berøres. du sørger bare for at popup'en lukker inden den åbner igen med en ny URL. Men det er det samme jeg opnår ved at redirecte indholdet med location.href. Det var mere den anden funktion, den der lukker vindet når siden (altså vinduets opener) forlades.
Avatar billede olebole Juniormester
13. februar 2003 - 00:16 #13
De linier er nødvendige .... IE retter bare din fejl for dig. Hvis du lukker vinduet, inden popup'en er blevet åbnet, er der jo ikke noget objekt, der kan have property'en closed  :)

Hvis du prøver mit eksempel, vil du se, det virker fint. Derfor tror jeg, det er den lidt specielle måde, du genererer dit frameset, der fucker up  :)
/mvh
Avatar billede pelkjaer Nybegynder
13. februar 2003 - 00:21 #14
mik>>Jep, jeg undlod helt at tænke på det egentlige formål - netop at lukke ved onunload. Jeg er sq' også træt :o)
Avatar billede mik789 Nybegynder
13. februar 2003 - 00:21 #15
ole> jeps, det er også det jeg har på fornemmelsen. det er det der loadinframes script der laver fejlen. jeg er dog ikke rigtig klar over hvorfor
Avatar billede mik789 Nybegynder
13. februar 2003 - 00:22 #16
pelkjaer> fuldt forståeligt. sov sødt!
Avatar billede mik789 Nybegynder
13. februar 2003 - 00:34 #17
ole> har du link til et andet loadinframes script? - et der fungerer og ikke skaber problemer andre steder på siderne.
Avatar billede olebole Juniormester
13. februar 2003 - 00:51 #18
Jeg er ikke helt med på, hvad du søger
Avatar billede mik789 Nybegynder
13. februar 2003 - 08:13 #19
ole> et script der udskriver framesettet dynamisk, når der linkes direkte til en underside.

det viste sig at jeg selv havde et link:

http://www.html.dk/artikler/00019/

/mik
Avatar billede olebole Juniormester
13. februar 2003 - 10:53 #20
Du kan lave det i PHP efter følgende princip (dette er din index.php):
<?

if ( !isset($page) || $page=="" ) $page = "default_side.html";

?>
<frameset cols="200,*">
  <frame src="side1.html">
  <frame src="<?=$page?>">
</frameset>

Og på hver underside:

<script type="text/JavaScript">
if (window==top) location.href = "index.php?page=" + location.href;
</script>

/mvh
Avatar billede mik789 Nybegynder
13. februar 2003 - 12:09 #21
ole> tak for tippet. det vil jeg gå videre med. jeg har ellers lige brugt et par timer til at rette det hele til efter html.dk's javascript, men dit php forslag ser betydeligt enklere (og hurtigere) ud. prøver.
Avatar billede mik789 Nybegynder
13. februar 2003 - 12:10 #22
og for øvrigt er der ikke længere nogle fejlmeddelelser, så det problem blev løst...
Avatar billede mik789 Nybegynder
13. februar 2003 - 12:22 #23
ole> er der ikke et lighedstegn for meget her?:

<frame src="<?=$page?>">

- altså det mellem ? og $
Avatar billede mik789 Nybegynder
13. februar 2003 - 13:27 #24
ole> eller det er vel en shortcut for echo ($page)

anyway, jeg har testet det (altså din php udgave), og det fungerer perfekt. tak igen ;-)

/mik
Avatar billede olebole Juniormester
13. februar 2003 - 14:35 #25
Selvtak  :)
Ja, lighedstegnet er en shorthand for echo eller print, når det står inline som her  :)
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