Avatar billede jakobgt Nybegynder
30. januar 2003 - 22:53 Der er 12 kommentarer og
1 løsning

Overføre en select fra en popup...

Hej!

Hvis jeg forsøger at køre flg. kode i javascript i et vindue, der er blevet åbnet via window.open, får jeg af IE at vide at der er opstået en fejl af arten "Serveren producerede en undtagelse". Jeg har fundet ud af at det er fejlen kommer i den markedere linie:

function luk_vindue(dropdown) {
  var e = window.opener.billedform.kategori;
  //Sletter alle oplysninger i select'en i openeren
  //Denne løkke virker helt fint
  alert(e.options.length);
  for (var i=0, l=e.options.length;i<l;i++) {
    if (e.options[0] != null) {
      e.options[0] = null;
    }
  } 
  l = dropdown.options.length;
  alert(dropdown.options[l-1].text)
for (var i=0;i<l;i++) {
    alert(dropdown.options[i].text);
    if (dropdown.options[i].value != '') {
   
      var defaultSelected = true;
      var selected = true;
      var optionName = new Option(dropdown.options[i].text, dropdown.options[i].value, defaultSelected, selected) <- det er her fejlen kommer....
   
      e.options[e.length] = optionName; 
    alert(optionName.value);
    }
  }
  window.self.close();
}

Er der nogen der har en idé til at løse det, er de mere end velkomne...
Avatar billede olebole Juniormester
01. februar 2003 - 14:56 #1
<ole>

Det var dog en bunke sludder, du har fået brygget sammen der  :)
Du skriver bl.a:

//Sletter alle oplysninger i select'en i openeren
  //Denne løkke virker helt fint
  alert(e.options.length);
  for (var i=0, l=e.options.length;i<l;i++) {
    if (e.options[0] != null) {
      e.options[0] = null;
    }
  }

Nej, den sletter ikke alle options ... nej, den fungerer ikke helt fint ... den kan kun slette den første option. Den skal hedde:

//Sletter alle oplysninger i select'en i openeren
  //Denne løkke virker helt fint
  for (var i=0, l=e.options.length;i<l;i++) {
    if (e.options[i] != null) {
      e.options[i] = null;
    }
  } 

Den anden løkke skal se sådan ud:

for (var i=0;i<l;i++) {
    alert(dropdown.options[i].text);
    if (dropdown.options[i].value != '') {
      var optionName = new Option(dropdown.options[i].text, dropdown.options[i].value);
      e.options[e.length] = optionName; 
      e.options[e.length-1].selected = true;
    }
}

/mvh
</bole>
Avatar billede olebole Juniormester
01. februar 2003 - 14:59 #2
Det kræver naturligvis, der er tale om en multiple-select, da du jo select'er alle options og det kun kan have mening i en multiple-select  ;o)
/mvh
Avatar billede jakobgt Nybegynder
01. februar 2003 - 15:08 #3
Hmmm, hvis jeg sletter den første options i multeple-selecten, så rykker option på plads 1 over på plads 0. (dette sker i hvert fald i IE). Jeg bliver derfor nødt til hele tiden at slette option på plads 0...
I denne sammenhæng undersøges der også om e.options[0] er null (if (e.options[0] != null)), dette har jeg simpelthen gjort i debug-fasen, hvor jeg troede at det var der den fejlede.... Den kunne nok godt fjernes.

Dit forslag: 
for (var i=0;i<l;i++) {
    alert(dropdown.options[i].text);
    if (dropdown.options[i].value != '') {
      var optionName = new Option(dropdown.options[i].text, dropdown.options[i].value);
      e.options[e.length] = optionName; 
      e.options[e.length-1].selected = true;
    }
}
producerer desværre den samme fejl...
(Som du selv skriver er den en multiple-select jeg bruger).

øhh, forresten kender du ikke en GOD debugger til Javascript i stedet for det lort der er i IE?

Mvh Jakob
Avatar billede Slettet bruger
01. februar 2003 - 15:27 #4
Brug Netscape! :)
Avatar billede jakobgt Nybegynder
01. februar 2003 - 15:28 #5
Den viser slet ikke nogen fejl eller noget....
Avatar billede Slettet bruger
01. februar 2003 - 15:35 #6
Netscape? Du skal skrive "java script:" i adresse-linjen...
Avatar billede jakobgt Nybegynder
01. februar 2003 - 15:42 #7
hmm, den kan da ikke importere de 2 filer, jeg skal bruge. Der kommer jo bare en ny konsol op, når man skriver javascript i adresse-linien...
Avatar billede olebole Juniormester
01. februar 2003 - 16:14 #8
1. Pointen var, at du _kun_ sletter den første option med din oprindelige løkke ... resten af den løkke er ligegyldig - den sletter intet. Skriv den, jeg skrev, så sletter du alle options.

2. Hvis den anden løkke giver fejl, må du poste en URL til eksemplet ... du må lave andre fejl.

3. Hvad NS' debugger angår, så er JS-konsollen jo netop debuggeren. Den giver dig langt bedre fejlmeldinger end IE.
/mvh
Avatar billede olebole Juniormester
01. februar 2003 - 17:29 #9
Nu har jeg kikket lidt nærmere på problematikken og fundet flere fejl i dit script ... herunder din adressering af select'en i åbnervinduet (du mangler 'document').

Det væsentligste problem synes dog at være IE6, som har nogle seriøse bugs omkring select-elementet. Jeg kan sagtens få noget til at fungere i NS, men IE stinker slemt  :x(

Selv den aller simpleste (og mest effektive) måde at løse problemet på, kan IE ikke håndtere, hvilket illustreres af følgende:

<html>
<head>
<script type="text/JavaScript">
function luk_vindue(dropdown) {
    var e = opener.document.billedform.kategori;
    alert(dropdown.innerHTML);
    e.innerHTML += dropdown.innerHTML;
    alert(e.innerHTML);
    window.self.close();
}
</script>
</head>
<body>
<form name="f">
    <select name="s">
        <option value="noget_val_0">noget 1</option>
        <option value="noget_val_1">noget 2</option>
        <option value="noget_val_2">noget 3</option>
    </select>
</form>
<button onclick="luk_vindue(document.f.s);">TEST</button>
</body>
</html>

Dette er popup-dokumentet ... læg mærke til de to alerts.

Morale: Drop dit forehavende, hvis dine brugere skal kunne anvende IE6 ... den kan simpelthen ikke håndtere den slags dynamisk opdatering af selects.
/mvh
Avatar billede olebole Juniormester
01. februar 2003 - 17:30 #10
Ups ... linien her:
  e.innerHTML += dropdown.innerHTML;
Skal ændres til:
  e.innerHTML = dropdown.innerHTML;
Avatar billede jakobgt Nybegynder
01. februar 2003 - 17:37 #11
hmmm, ok. Jeg tror nu jeg har løst problemet alligevel. Jeg kalder en funktion i opener-dokumentet, som så skriver hele lortet ind i den pågældende select. Det ser ud til at virke både i NS7.0 og IE 6.0. Hvis du vil se koden for de to sider kan du se dem her: http://gtnet.eom.dk/temp

Mvh Jakob
Avatar billede olebole Juniormester
01. februar 2003 - 17:39 #12
selvtak
Avatar billede jakobgt Nybegynder
02. februar 2003 - 11:41 #13
Det var så lidt, håber du kunne bruge det til noget... :o)
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

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel