30. januar 2003 - 22:53Der 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....
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; } }
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?
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
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:
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
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
Det var så lidt, håber du kunne bruge det til noget... :o)
Synes godt om
Ny brugerNybegynder
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.