Avatar billede atheist Nybegynder
29. december 2003 - 13:52 Der er 12 kommentarer og
1 løsning

Standarter til Javascript?

Findes der et sted en officiel standart indenfor Javascript? Jeg har lige brugt temmelig lang tid på det her script hvorefter min lillebror gør mig opmærksom på at det kun virker i IE... Jeg har holdt det så simpelt som muligt for netop at få det til at virke i så mange browsere som muligt, men ak! Hvis der i øvrigt skulle være nogen derude der skulle være nogen der sidder og ved hvordan jeg skjuler/viser ting ville det være fint, jeg har brugt style="visibility:hidden" og så fundet det frem med objekt.style.visibility = "visible"...
Avatar billede roenving Novice
29. december 2003 - 14:05 #1
-- hvilket sidste også er helt korrekt, dog vil den metode betyde, at objektet stadig optager plads, hvis man ikke vil have det, skal man bruge display:block|inline|none (block til block-level som f.eks. div og p og inline til inline-level som f.eks. span !-)

Angående standard, kan man finde visse minimumsregler, som alle browser-fabrikanter overholder, men der kommer hurtigt forskelle, men kig på http://www.eksperten.dk/spm/444616 -- der er en masse links, som kan bruges ...

Pga. forskellighederne (som er helt efter propositionerne for ECMA-script !-) kan det ofte anbefales at spørge, eller bare udvikle og konstant krydschecke !-)

Hårde nødder i dag er vel først og fremmest forskellen i event-modeller samt de browser-specifikke udvidelser, som IEs filter-objekt og behaviors ...

Medmindre, selvfølgelig, at man _skal_ have understøttelse af v4-browsere med !-)
Avatar billede atheist Nybegynder
29. december 2003 - 14:30 #2
ok, men hvis det er rigtigt nok detjeg har lavet, hvordan kan det så være at det ikke virker? Scriptet jeg har lavet er følgende:

function mus(n){
event.srcElement.style.cursor='hand'
event.srcElement.style.color=n
}
var hvw="hidden"
var fe="hidden"
var bo="hidden"
var po="hidden"
var lo="hidden"

function vis(be){

    if (be=="hverdag"){

        if (hvw == "hidden"){
           
hvw="hidden"
fe="hidden"
bo="hidden"
po="hidden"
lo="hidden"
            hvw = "visible"
            fes.style.visibility="hidden"
            bør.style.visibility="hidden"
            pot.style.visibility="hidden"   
            lig.style.visibility="hidden"
            hv.style.visibility = "hidden"
            hv.style.visibility = "visible"

        }
            else{
                hv.style.visibility="hidden"
                hvw = "hidden"
                event.srcElement.color ="#c0c0c0"
            }
        }

    if (be=="børn"){
        if (bo == "hidden"){
           
hvw="hidden"
fe="hidden"
bo="hidden"
po="hidden"
lo="hidden"
            bo = "visible"
            fes.style.visibility="hidden"
            bør.style.visibility="hidden"
            pot.style.visibility="hidden"
            lig.style.visibility="hidden"
            hv.style.visibility = "hidden"   
            bør.style.visibility = "visible"
        }
        else{
            bør.style.visibility="hidden"
            bo = "hidden"
        }
    }

if (be=="port"){

        if (po == "hidden"){
                       
hvw="hidden"
fe="hidden"
bo="hidden"
po="hidden"
lo="hidden"
            po = "visible"

fes.style.visibility="hidden"
bør.style.visibility="hidden"
pot.style.visibility="hidden"
lig.style.visibility="hidden"
hv.style.visibility = "hidden"
pot.style.visibility = "visible"
        }
        else{
            pot.style.visibility="hidden"
            po = "hidden"
        }
    }

    if (be=="fest"){
        if (fe == "hidden"){
           
hvw="hidden"
fe="hidden"
bo="hidden"
po="hidden"
lo="hidden"
            fe = "visible"
            fes.style.visibility="hidden"
            bør.style.visibility="hidden"
            pot.style.visibility="hidden"
            lig.style.visibility="hidden"
            hv.style.visibility = "hidden"
            fes.style.visibility = "visible"
        }
        else{
            fes.style.visibility="hidden"
            fe = "hidden"
        }
    }
    if (be=="log"){
           
hvw="hidden"
fe="hidden"
bo="hidden"
po="hidden"
lo="hidden"
        if (lo == "hidden"){
            lo = "visible"
            fes.style.visibility="hidden"
            bør.style.visibility="hidden"
            pot.style.visibility="hidden"
            lig.style.visibility="hidden"
            hv.style.visibility = "hidden"
            lig.style.visibility = "visible"
        }
        else{
            lig.style.visibility="hidden"
            lo = "hidden"
        }
    }

}
du kan se det i funktion på http://free.klasseliste.dk

BTW: Jeg ved godt det er lavet lidt bøvlet, men jeg kunne ikke lige finde andre måder at gøre det på...
Avatar billede roenving Novice
29. december 2003 - 14:43 #3
Ja, du støder lige hovedet direkte ind i de mest oplagte forskelle:

Event-objekterne er vidt forskellige og opfører sig bl.a. forskelligt i forhold til kald ...

Desuden har IE et proprietært objekt (document.all), som man kan tillade sig at se væk fra ...

-- du har desuden også brugt ø, hvilket er direkte ulovligt både i html og javascript, men som accepteres af IE !-|

-- men alt i alt burde din kode kunne gøres multi-browser med omkring en tredjedel af den kode du har lavet -- kigger lige på det !-)
Avatar billede roenving Novice
29. december 2003 - 15:04 #4
Idet jeg ikke har taget højde for NS4, samt ændret et par navne (bør -> bor og lig -> log !-), samt at jeg forudsætter, at du laver kaldet fra 'børn' om til 'born'

var ie4 = (document.all)?true:false;
var dom = (document.getElementById)?true:false;
var ie5 = (document.all&&dom)?true:false;

function mus(n,e){
var st = (ie4)?event.srcElement.style:e.target.style;
st.cursor = (dom)?'pointer':'hand';
st.color = n;
}

function vis(be){
  var flds = ['fes','bor','pot','log','hv'];
  var st = null;
  for(i=0;flds.length>i;i++){
    st = (dom)?document.getElementById(flds[i]).style:document.all[flds[i]].style;
    if(be.substring(0,2)==flds[i].substring(0,2)){
      st.visibility = (st.visibility=='hidden')?'visible':'hidden';
    }else{
      st.visibility = 'hidden';
  }
}

-- og det er iøvrigt ganske utestet, men du kan jo vende tilbage, hvis der er noget, som ikke fungerer !-)
Avatar billede roenving Novice
29. december 2003 - 15:07 #5
-- jeg er også gået ud fra, at Opera bruger samme event-model som IE, men det gør den vel ...
Avatar billede atheist Nybegynder
29. december 2003 - 15:18 #6
Du havde lige glemt en enkelt } i vis(), men ellers funker det som det skal! Takker for hjælpen! Smider du et svar?
Avatar billede roenving Novice
29. december 2003 - 15:19 #7
Ja, det har du ret i !-)

-- og velbekomme '-)
Avatar billede roenving Novice
29. december 2003 - 15:20 #8
-- og tak for points ;~}
Avatar billede atheist Nybegynder
29. december 2003 - 22:06 #9
lige to hurtige tillægs-spørgsmål:
Første gang jeg klikker på et punkt i menuen sker der ingenting, udover at der kommer en stiplet ramme om, som når man markerer et link... Er der en løsning på det problem?
Udover det så virker min billed-viser funktion heller ikke, jeg har hidtil brugt at jeg har haft sti, højde og bredde i arays, hvor jeg så kalder en funktion med billedets nr. hvorefter den indstiller parametrene:

function visbild(i){
bild.height= hojde[i]
bild.width = bredde[i]
bild.src = "billeder/"+navn[i]
}
men der sker som sagt ikke noget i mozilla og netscape...
Avatar billede roenving Novice
30. december 2003 - 03:56 #10
Fordi den måde at skrive på (bild.noget !-) forudsætter, at den kender document.all ...

så:

function visbild(i){
var bild = (dom)?document.getElementById('bild'):document.all['bild'];
bild.height= hojde[i];
bild.width = bredde[i];
bild.src = "billeder/"+navn[i];
}

-- denne måde forudsætter jo så, at den tidligere kode er aktiveret (hvilket den vil være, hvis den overhovedet findes i dokumentet !-)

-- og det med at den ikke fungerer første gang hænger sandsynligvis sammen med, at properties i css kun kan aflæses, hvis de er skrevet direkte i tagget (eller sat med javascript), så:

<div id="fes" style="visibility:hidden;">
...
</div>

hth
Avatar billede atheist Nybegynder
30. december 2003 - 10:14 #11
ok, det er ved at være en anelse skummelt: Nu virker det fint i mozilla, men ikke i opera, før var det lige omvendt... Ummiddelbart ville jeg lave en funktion derskelner mellem de to browsere, men så er risioken jo at der kommer en med en helt 3. browser, så det er vel heller ikke holdbart i længden?
Avatar billede roenving Novice
30. december 2003 - 13:42 #12
-- er det bild-tingen, som ikke virker ?-)

-- og jeg kom i tanke om en omvendt måde at gøre det på, så man ikke behøver at have properties på tagget:

      st.visibility = (st.visibility!='visible')?'visible':'hidden';

-- under forudsætning af, at de er hidden som udgangspunkt !-)
Avatar billede atheist Nybegynder
04. januar 2004 - 12:58 #13
Det er de! Smider du et svar så du kan inkassere point?
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