Avatar billede weiland Nybegynder
11. august 2004 - 10:47 Der er 30 kommentarer og
1 løsning

Højrekliksmenu med pop-up-funktion

Dette er et ekstra spørgsmål til http://www.eksperten.dk/spm/521972

Min højrekliksfunktion ser sådan ud:

<script type="text/javascript">
muligheder = new Array();
muligheder[0] = new Array("parent.location.href","PageOptions.asp?Action=StatusPublic","Offentlig");
muligheder[1] = new Array("","PageOptions.asp?Action=StatusLogin","Kræver login");

function linkmenu(lnk) {
  pop = window.createPopup();
  pb = pop.document.body;
  pb.style.border = "1px solid #A2A2A2";
  pb.style.backgroundColor = "#ffffff";
  pb.style.fontFamily = "Verdana";
  html = '<table style="width: 100%; height: 100%; display: inline;" id="menuTable" cellpadding=0 cellspacing=0>';
  lnkid = lnk.id.replace(/\D/g, "");
  for (i = 0; i < muligheder.length; i++)
      if (muligheder[i][0]=='') {
  html += '<tr><td style="font-size: 9px; cursor: pointer; cursor: hand;" onmouseover="this.style.backgroundColor = \'#F9F8F3\';" onmouseout="this.style.backgroundColor = \'#ffffff\';" onclick="' + muligheder[i][0] + ' = \'' + muligheder[i][1] + '&PageID=' + lnkid + '\';">&nbsp;' + muligheder[i][2] + '</td></tr>';
  } else {
  html += '<tr><td onclick="PopWin('Archive.asp',550,600);return false;">Klik her</tr>';
  }
  html += '</table>';
  pb.innerHTML = html;
  pop.show(-30, 12, 160, 180, lnk); //Afstand fra linket i x, y - derefter bredde og højde på menuen
}
</script>

Altså hvis intet er angivet i muligheder[i][0], så skal linket åbne i et nyt vindue. Popup-funktionen hedder PopWin og ser sådan her ud:

function PopWin(url,h,w) { var ww = 480, wh = 340, leftPos = null, topPos = null;

IE=(document.all)?true:false;
var wh = (IE)?document.body.clientHeight : window.innerHeight;
var ww = (IE)?document.body.clientWidth : window.innerWidth;

if (top.screen){
  if (screen.width){
    leftPos = Math.round((ww-w-10)/2);
    topPos = Math.round((wh-h-29)/2);
  } else {
    leftPos = 50
    topPos = 50
  }
}

popupWin = window.open(url, 'popup', 'scrollbars,height=' + h + ',width=' + w + ',top=' + topPos + ',left=' + leftPos + '')
}

PopWin-funktionen vil ikke virke. Browseren siger "Et objekt var ventet"
I stedet for PopWin har jeg også prøvet med:
onclick="window.open('vejledninger/sortering.html','','height=550','width=600');return false;
- men browseren siger det samme.
Avatar billede roenving Novice
11. august 2004 - 11:54 #1
for (i = 0; i < muligheder.length; i++)
      if (muligheder[i][0]!='') {
  html += '<tr><td style="font-size: 9px; cursor: pointer; cursor: hand;" onmouseover="this.style.backgroundColor = \'#F9F8F3\';" onmouseout="this.style.backgroundColor = \'#ffffff\';" onclick="' + muligheder[i][0] + ' = \'' + muligheder[i][1] + '&PageID=' + lnkid + '\';">&nbsp;' + muligheder[i][2] + '</td></tr>';
  } else {
  html += '<tr><td onclick="PopWin('"+muligheder[i][1]+"',550,600);return false;">Klik her</td></tr>';
  }

-- der var faktisk et par fejl, som var lidt, ehhh ...

-- og så ville jeg nok:

function PopWin(url,h,w) { var ww = 480, wh = 340, leftPos = null, topPos = null;
IE=(document.all)?true:false;
var wh = (window.innerHeight)?window.innerHeight:(IE)document.body.clientHeight:screen.availHeight;
var ww = (window.innerWidth)?window.innerWidth:(IE)document.body.clientWidth:screen.availWidth;

  if (screen.width){
    leftPos = Math.round((ww-w-10)/2);
    topPos = Math.round((wh-h-29)/2);
  } else {
    leftPos = 50
    topPos = 50
  }

popupWin = window.open(url, 'popup', 'scrollbars,height=' + h + ',width=' + w + ',top=' + topPos + ',left=' + leftPos);
}

-- og så må du prøve at debugge ved at indsætte nogle alerts, hvis der stadig er fejl !-)
Avatar billede roenving Novice
11. august 2004 - 11:55 #2
Hov ...

var wh = (window.innerHeight)?window.innerHeight:(IE)?document.body.clientHeight:screen.availHeight;
var ww = (window.innerWidth)?window.innerWidth:(IE)?document.body.clientWidth:screen.availWidth;
Avatar billede weiland Nybegynder
11. august 2004 - 12:19 #3
Tak for hjælpen!

Nu har jeg stirret på din løsning i 10 minutter :-), og så vidt jeg kan se, har du "kun" ændret:

html += '<tr><td onclick="PopWin('Archive.asp',550,600);return false;">Klik her</tr>';

til

html += '<tr><td onclick="PopWin('"+muligheder[i][1]+"',550,600);return false;">Klik her</td></tr>';

Har jeg ikke ret i, at det er det eneste? (bortset fra PopWin-funktionen) :-)

Og når jeg anvender det, så siger browseren at "tegnet ';' var ventet" og henviser til netop den ændrede linie.
Har prøvet at sætte semikolon hist og pist, men det vil ikke lykkes :-(

Ved på stående fod ikke, hvordan jeg kan debugge den fejl med alerts :-)
Avatar billede roenving Novice
11. august 2004 - 12:24 #4
Argh, der var jo en fejl ...

html += '<tr><td onclick="PopWin(\''+muligheder[i][1]+'\',550,600);return false;">Klik her</td></tr>';

-- men jeg har også ændret == til != ...
Avatar billede weiland Nybegynder
11. august 2004 - 12:41 #5
Vi nærmer os!
Nu loader siden uden fejl, og højrekliksmenuen dukker op ved højreklik.

"Klik her"-linket står det forventede sted... men når man klikker på det, så kommer en alertboks frem:

Der opstod en fejl i scriptet på denne side.
Linie: 1
Tegn: 1
Fejl: Et objekt var ventet
Kode: 0
Og så henvises til den aktuelle URL. Det er altså fx ikke den side, som kaldes i popup-vinduet.

Hmmm, hvad gør man så? For Linie 1, tegn 1 passer jo ingen steder :-)
Hvilket objekt kan der være tale om?
Avatar billede roenving Novice
11. august 2004 - 12:44 #6
Prøv at sætte en alert ind i PopWin-funktionen ...
Avatar billede weiland Nybegynder
11. august 2004 - 12:49 #7
har simpelthen sagt:

function PopWin(url,h,w) { var ww = 480, wh = 340, leftPos = null, topPos = null;
alert("Hallo");

..etc.

Men alerten kommer aldrig. Stadig kun førnævnte fejl-meddelelse.
Avatar billede roenving Novice
11. august 2004 - 12:58 #8
Prøv engang med:

html += '<tr><td onclick="opener.PopWin(\''+muligheder[i][1]+'\',550,600);return false;">Klik her</td></tr>';

-- jeg er meget i tvivl om, hvordan man skal behandle sådan en popup, og min reference er ikk specielt meddelsom på dette område, men den siger dog, at det er et vindue, og så skal vi vel hente funktionen i opener ...
Avatar billede weiland Nybegynder
11. august 2004 - 13:09 #9
Æv, nu siger browseren "opener er null eller ikke et objekt"

Det skal måske siges :-), at siden allerede ER et popup-vindue.... som så skal åbne endnu et.
Skulle jeg ha sagt det noget før?
Avatar billede roenving Novice
11. august 2004 - 13:13 #10
Så skal vi måske til at prøve med parentWindow:

html += '<tr><td onclick="parentWindow.opener.PopWin(\''+muligheder[i][1]+'\',550,600);return false;">Klik her</td></tr>';

-- evt. uden opener, men det tror jeg ikke !-)
Avatar billede weiland Nybegynder
11. august 2004 - 13:18 #11
Desværre :-(
MED opener er fejlen "null eller ikke et objekt"
UDEN opener er fejlen "Objektet understøtter ikke denne egenskab eller metode"

Kan vi åbne en popup på en anden måde? Selvom jeg da stadig håber på, at dette lykkes :-)
Avatar billede roenving Novice
11. august 2004 - 13:26 #12
Er det parentWindow, som er null, eller er det stadig opener ?-)
Avatar billede weiland Nybegynder
11. august 2004 - 13:29 #13
Det er "ParentWindow.opener"........
Avatar billede roenving Novice
11. august 2004 - 13:31 #14
Du mener vel "parentWindow.opener" ...
Avatar billede weiland Nybegynder
11. august 2004 - 13:36 #15
Ja, det gør jeg :-)
Der står parentWindow i scriptet
Avatar billede roenving Novice
11. august 2004 - 13:48 #16
Hrm, så kan vi jo prøve det mere besværlige:

...
  html += '</table>';
  html += "<scr"+"ipt type='text/javascript'>function PopWin(url,h,w) { var ww=480, wh=340, leftPos=null, topPos=null; IE=(document.all)?true:false; var wh=(window.innerHeight)?window.innerHeight:(IE)document.body.clientHeight:screen.availHeight; var ww=(window.innerWidth)?window.innerWidth:(IE)document.body.clientWidth:screen.availWidth; if(screen.width){ leftPos=Math.round((ww-w-10)/2); topPos=Math.round((wh-h-29)/2); } else { leftPos=50; topPos=50; }popupWin=window.open(url, 'popup', 'scrollbars,height=' + h + ',width=' + w + ',top=' + topPos + ',left=' + leftPos); }<\57scr"+"ipt>";
  pb.innerHTML = html;
  pop.show(-30, 12, 160, 180, lnk); //Afstand fra linket i x, y - derefter bredde og højde på menuen
}
Avatar billede weiland Nybegynder
11. august 2004 - 14:16 #17
Den siger stadig parentWindow.opener er null eller ikke et objekt

For at gøre det lidt nemmere for dig at kigge mig i kortene, har jeg lavet http://www.sepius.dk/eksperten/

Det er godt nok ikke i et popup-vindue, men så kan du da se, hvad jeg gør (forkert) :-)
Avatar billede roenving Novice
11. august 2004 - 14:23 #18
Hov, jeg glemte at skrive, at du så ikke skal have noget foran PopWin !-)
Avatar billede weiland Nybegynder
11. august 2004 - 14:27 #19
Er gjort nu :-)

Nu melder den "et objekt var ventet". :-)
Avatar billede weiland Nybegynder
11. august 2004 - 15:52 #20
Jeg har også prøvet bare med:
html += '<tr><td><a href="\''+muligheder[i][1]+'\'">&nbsp;' + muligheder[i][2] + '</a></td></tr>';

Så melder siden ikke fejl, men der sker INTET når man trykker på linket.......
Avatar billede roenving Novice
11. august 2004 - 16:00 #21
Når der nu bruges parent i location, så er det måske bare det, der skal til ?-)

Altså, at PopWin ligger i hoveddokumentet og kaldet laves med parent.PopWin !-)
Avatar billede weiland Nybegynder
11. august 2004 - 16:08 #22
Åbenbart ikke.. melder "Objektet understøtter ikke denne egenskab eller metode"

Prøver lige at lave et eksempel på http://www.sepius.dk/eksperten, hvor det foregår i popup-vindue
Avatar billede roenving Novice
11. august 2004 - 16:12 #23
Altså:

<script type="text/javascript">
muligheder = new Array();
muligheder[0] = new Array("parent.location.href","PageOptions.asp?Action=StatusPublic","Offentlig");
muligheder[1] = new Array("","PageOptions.asp?Action=StatusLogin","Kræver login");

function linkmenu(lnk) {
  pop = window.createPopup();
  pb = pop.document.body;
  pb.style.border = "1px solid #A2A2A2";
  pb.style.backgroundColor = "#ffffff";
  pb.style.fontFamily = "Verdana";
  html = '<table style="width: 100%; height: 100%; display: inline;" id="menuTable" cellpadding=0 cellspacing=0>';
  lnkid = lnk.id.replace(/\D/g, "");
for (i = 0; i < muligheder.length; i++)
      if (muligheder[i][0]!='') {
  html += '<tr><td style="font-size: 9px; cursor: pointer; cursor: hand;" onmouseover="this.style.backgroundColor = \'#F9F8F3\';" onmouseout="this.style.backgroundColor = \'#ffffff\';" onclick="' + muligheder[i][0] + ' = \'' + muligheder[i][1] + '&PageID=' + lnkid + '\';">&nbsp;' + muligheder[i][2] + '</td></tr>';
  } else {
  html += '<tr><td onclick="parent.PopWin('"+muligheder[i][1]+"',550,600);return false;">Klik her</td></tr>';
  }
  html += '</table>';
  pb.innerHTML = html;
  pop.show(-30, 12, 160, 180, lnk); //Afstand fra linket i x, y - derefter bredde og højde på menuen
}
function PopWin(url,h,w) { var ww = 480, wh = 340, leftPos = null, topPos = null;
IE=(document.all)?true:false;
var wh = (window.innerHeight)?window.innerHeight:(IE)document.body.clientHeight:screen.availHeight;
var ww = (window.innerWidth)?window.innerWidth:(IE)document.body.clientWidth:screen.availWidth;

  if (screen.width){
    leftPos = Math.round((ww-w-10)/2);
    topPos = Math.round((wh-h-29)/2);
  } else {
    leftPos = 50
    topPos = 50
  }

popupWin = window.open(url, 'popup', 'scrollbars,height=' + h + ',width=' + w + ',top=' + topPos + ',left=' + leftPos);
}
</script>
Avatar billede weiland Nybegynder
11. august 2004 - 16:14 #24
Så ligger eksemplet der, hvor PopWin-funktionen ligger i hovedvinduet
Avatar billede roenving Novice
11. august 2004 - 16:18 #25
PopWin ligger i vinduet under popuppen ?-)

-- så:

parent.opener.PopWin(...)
Avatar billede weiland Nybegynder
11. august 2004 - 16:22 #26
For første gang lykkes det!!!

Det er lige hvad man kalder "hovedvindue" og "hoveddokument"

Jeg tester lige videre!!!
Avatar billede roenving Novice
11. august 2004 - 16:23 #27
Muy bueno !-)
Avatar billede weiland Nybegynder
11. august 2004 - 17:14 #28
Det fungerer godt indtil videre.... :-)
Jeg skylder dig en øl!

Nu tager jeg ud at løbe. Jeg forventer at have fået et svar fra dig, når jeg vender tilbage! :-)
Avatar billede roenving Novice
11. august 2004 - 17:18 #29
Velbekomme '-)
Avatar billede roenving Novice
11. august 2004 - 18:01 #30
-- og tak for point ;~}

-- hvornår skal jeg komme forbi og tømme den øl ?-)
Avatar billede weiland Nybegynder
11. august 2004 - 18:24 #31
Det er mig, der siger tak!
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