Avatar billede majbom Novice
26. juni 2009 - 09:21 Der er 5 kommentarer og
1 løsning

js-fejl ved sletning af options i select

hej experter

jeg har følgende script:

http://pastebin.com/m639c8cf

som virker helt efter hensigten, men der kommer en fejl som irriterer mig helt vildt selvom det virker :)

prøv selv her:

http://majbom.com/testarea/JavaScript/js6.htm

problemet er når jeg flytter "gruppe 3" - så kommer fejlen:

Detaljer om fejl på websiden

Brugeragent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Tidsstempling: Fri, 26 Jun 2009 07:16:47 UTC


Meddelelse: 'objSel.options[...].parentNode' er null eller ikke  et objekt
Linje: 13
Tegn: 6
Kode: 0
URI: http://majbom.com/testarea/JavaScript/js6.htm

og det er lidt svært lige at se i eksemplet på pastebin, da den fucker i linjetallene, men det er denne linje:

while(objSel.options[i].parentNode.label==strGrp){

i funktionen "moveGroup"

jeg kan godt regne ud at det er fordi det er den sidste i rækken, for den gør det ikke når jeg flytter de andre grupper, medmindre jeg flytter gruppe 2 EFTER gruppe 3, for så vil den sidste i gruppe 2 jo være den sidste i rækken - og det samme med gruppe 1 EFTER gruppe 2

men hvordan undgår jeg denne fejl?

jeg har ikke skrevet helekoden selv, jeg har fundet lidt rundt omkring og tilpasset det til mit behov.

på forhånd tak
Avatar billede roenving Novice
26. juni 2009 - 17:00 #1
Har du prøvet at gøre det bagfra ?-)

for(var i = objSel.length - 1;i>=0; i--)
Avatar billede majbom Novice
26. juni 2009 - 20:16 #2
tak for forsøget roenving, men det spiller stadig ikke;

nu tager den bare den sidste i i gruppen, så kan man trykke igen og så tager den, den før den forrige (kun ved den gruppe der indeholder den sidste option)

desuden kommer fejlen nu hver gang - se selv:

http://majbom.com/testarea/JavaScript/js6.htm
Avatar billede tjens Nybegynder
26. juni 2009 - 21:03 #3
Den sidste bliver null, fordi du fjerner den med moveOption:
Så bliver objSel.length jo mindre og dermed bliver i for stor.

Forslag: Drop den while og styr variabel i istedet:

for(var i=0; i < objSel.length ; i++){
    if(objSel.options[i].parentNode.label==strGrp){
        objSel.options[i].selected = true;
        moveOption(objSel);    // Når aktuel linie fjernes
        i--;                                  // skal i ikke tælles op for at pege på næste: Det gør den allerede
    }
}
Avatar billede majbom Novice
27. juni 2009 - 12:44 #4
-> tjens - det spiller jo bare lige som det skal!

smid et svar - tak for hjælpen :)
Avatar billede tjens Nybegynder
27. juni 2009 - 17:35 #5
Hermed et svar, og tak for point
Avatar billede majbom Novice
27. juni 2009 - 20:03 #6
velbekomme :)
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