Avatar billede moejensen Nybegynder
03. oktober 2007 - 16:03 Der er 13 kommentarer og
1 løsning

Forskel på Javascript på IE 6 og IE 7

Er der nogen der kan svare på hvad der er ændret i Javascript fortolkningen fra IE 6 til IE 7?

Jeg har et javascript array der virker fint i IE 7 men i IE 6 fejler det?
Avatar billede roenving Novice
03. oktober 2007 - 16:19 #1
Hvordan ser det ud ?-)
Avatar billede sherlock Nybegynder
03. oktober 2007 - 16:21 #2
IE7 JS er version 1.5
IE6 JS er version 1.4

Der er helt sikkert nogle forskelle.
Avatar billede olebole Juniormester
03. oktober 2007 - 17:40 #3
<ole>

Hvad har du problemer med?

/mvh
</bole>
Avatar billede moejensen Nybegynder
04. oktober 2007 - 09:19 #4
Det er faktisk en fejl jeg får i et omkodet script fra roenving. Jeg har brugt hans multiple select, og udbygget det så det har 6 niveauer.

Koden er på ca 1200 linier, da der kan vælges i en organisationsstruktur, der har mere end 300 forskellige valgmuligheder.

Koden til selve styringen er her:

        function createOpts(sel){
            var s = new Array();
            var num = 0, txt = "arr";
            var ar = opt = null;
            var n = sel.selectedIndex;
            var args = createOpts.arguments.length;
            for(var i=1;args>i;i++){
                s[i-1] = document.getElementById(createOpts.arguments[i]);
                if(s[i-1]==sel)num=i;
            }
            if(args>1){
                if(s[num])sel = s[num];
                else return;
            }
            if(n==0&&args>1){
                for(i=num;args>i+1;i++){
                    s[i].length = 0;
                    opt = document.createElement('OPTION');
                    s[i].appendChild(opt);
                    opt.value = "";
                    opt.text = "-- Choose if applicable --";
                }
                return true
            };
            for(i=0;num>i;i++){
                txt+="["+(s[i].selectedIndex-1)+"][1]";
            }
            ar = eval(txt);
            sel.length = 0;
            opt = document.createElement('OPTION');
            sel.appendChild(opt);
          opt.value = "";
          opt.text = "-- Choose if applicable --";
            for(i=0;ar.length>i;i++){
                opt = document.createElement('OPTION');
                sel.appendChild(opt);
                if(typeof ar[i] == 'object'){
                  opt.value = ar[i][0];
                  opt.text = ar[i][0];
                }else{
                  opt.value = ar[i];
                  opt.text = ar[i];
              }
            }
            if(args>num+2){
                for(i=num+1;args-1>i;i++){
                    s[i].length = 0;
                    opt = document.createElement('OPTION');
                    s[i].appendChild(opt);
                }
            }
        }
       
        function initSels(){
            createOpts(document.getElementById('sel3'));
           
            var main_department;
            main_department = 'IT';
            if (main_department > '') {
                objSelect = document.getElementById('sel3');
                for (var oIndex = 0; oIndex < objSelect.options.length; oIndex++) {
                    if (objSelect.options[oIndex].text == main_department) {
                        objSelect.selectedIndex = oIndex;
                        createOpts(document.UserData.main_department,'sel3','sel4','sel5','sel6','sel7','sel8');
                    }
                }
            }
            var region_department;
            region_department = 'Group';
            if (region_department > '') {
                objSelect = document.getElementById('sel4');
                for (var oIndex = 0; oIndex < objSelect.options.length; oIndex++) {
                    if (objSelect.options[oIndex].text == 'Group') {
                        objSelect.selectedIndex = oIndex;
                        createOpts(document.UserData.region_department,'sel3','sel4','sel5','sel6','sel7','sel8');
                    }
                }
            }
           
            var sub_department1;
            sub_department1 = 'Operations';
            if (sub_department1 > '') {
                objSelect = document.getElementById('sel5');
                for (var oIndex = 0; oIndex < objSelect.options.length; oIndex++) {
                    if (objSelect.options[oIndex].text == 'Operations') {
                        objSelect.selectedIndex = oIndex;
                        createOpts(document.UserData.sub_department1,'sel3','sel4','sel5','sel6','sel7','sel8');
                    }
                }
            }
           
            var sub_department2;
            sub_department2 = '';
            if (sub_department2 > '') {
                objSelect = document.getElementById('sel6');
                for (var oIndex = 0; oIndex < objSelect.options.length; oIndex++) {
                    if (objSelect.options[oIndex].text == '') {
                        objSelect.selectedIndex = oIndex;
                        createOpts(document.UserData.sub_department2,'sel3','sel4','sel5','sel6','sel7','sel8');
                    }
                }
            }
           
            var sub_department3;
            sub_department3 = '';
            if (sub_department3 > '') {
                objSelect = document.getElementById('sel7');
                for (var oIndex = 0; oIndex < objSelect.options.length; oIndex++) {
                    if (objSelect.options[oIndex].text == '') {
                        objSelect.selectedIndex = oIndex;
                        createOpts(document.UserData.sub_department3,'sel3','sel4','sel5','sel6','sel7','sel8');
                    }
                }
            }
           
            var sub_department4;
            sub_department4 = '';
            if (sub_department4 > '') {
                objSelect = document.getElementById('sel8');
                for (var oIndex = 0; oIndex < objSelect.options.length; oIndex++) {
                    if (objSelect.options[oIndex].text == '') {
                        objSelect.selectedIndex = oIndex;
                        createOpts(document.UserData.sub_department4,'sel3','sel4','sel5','sel6','sel7','sel8');
                    }
                }
            }
        }


Den linie den fejler i er:

sel.length = 0;
Avatar billede moejensen Nybegynder
04. oktober 2007 - 09:20 #5
funktionen  function initSels() køres når siden loades, for at allerede valgte felter fra forrige gennemkørsel, automatisk bliver valgt igen, når siden loades.
Avatar billede moejensen Nybegynder
05. oktober 2007 - 09:10 #6
Er der nogen bud?
Avatar billede olebole Juniormester
05. oktober 2007 - 17:37 #7
Ja, det er en lidt 'beskidt' måde at tømme et select-element på, som jeg også tidligere har brugt. Prøv dette i stedet:
    while (sel.firstChild) sel.removeChild(sel.firstChild);

- og gør det samme lidt længere ned i koden, hvor du tømmer select-elementet s[i]
Avatar billede moejensen Nybegynder
08. oktober 2007 - 12:02 #8
Hej Ole,

Nu får den fint nok loadet siden uden fejl, men den får ikke sat de gamle værdier ind.

Så den får ikke valgt de muligheder der skal vælges i function initSels()
Avatar billede moejensen Nybegynder
10. oktober 2007 - 18:51 #9
nogen bud?
Avatar billede sherlock Nybegynder
10. oktober 2007 - 20:07 #10
Debugging,, desværre :|
Avatar billede moejensen Nybegynder
11. oktober 2007 - 14:12 #11
det må du forklare lidt nærmere
Avatar billede sherlock Nybegynder
11. oktober 2007 - 16:30 #12
Du skal finde en script-debugger til din browser og single-steppe gennem koden.
Så bliver det tydeligt hvor og hvorfor det går galt.
Avatar billede olebole Juniormester
11. oktober 2007 - 17:51 #13
Det er ikke til for os at debugge din kode uden noget omgivende kode og data at teste den i.

Prøv at sætte alerts ind og find ud af, om en variabel er tom - eller en betingelse i en if-sætning ikke er opfyldt - eller lignende. Prøv at begynde enten så tæt på det sted, de ved, det går galt, og bevæg dig baglæns i koden - eller start i begyndelsen af hændelseskæden og bevæg dig fremad, til noget ikke er som forventet.

Alert variablers og array's indhold - og alert innerHTML'en af de forskellige selects - alt efter, hvad der er interessant/vigtigt på det pågældende sted i koden. Det er måden, jeg selv finder fejl på, men det kræver, man har koden liggende i de rette omgivelser, hvor den skal virke ... og det er nok ikke realistisk med så lang en kode i en E-tråd  :)
Avatar billede moejensen Nybegynder
15. december 2015 - 20:38 #14
lukkes
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