Avatar billede sbm Nybegynder
15. september 2006 - 14:33 Der er 7 kommentarer og
1 løsning

Proof-reading please

Jeg oprettede et spørgsmål lidt tidligere idag:
http://www.eksperten.dk/spm/732514

Jeg har nu strikket følgende løsningsmulighed sammen. Nogle javascript-kyndige folk må meget gerne læse det igennem, og gøre opmærksom på eventuelle huller.

Til at starte med skal det være en generisk måde til at vise/skjule layers, men den burde også fungere til andet.

Kommentarer er meget velkomne. :-)

-------------------------------------------------



// Tries to manipulate some DIV element.
// element = the id of the DIV element to be manipulated
// attribute = the style attribute of the element to be manipulated
// value = the new value of the attribute
// Sample function calls:
//    styleSetter('Tab1','visibility','visible');
//    styleSetter('Tab2','visibility','hidden');
function styleSetter(element, attribute, value){
        okay = false;
        javascript_setvalue = "";
        javascript_checkvalue = "";

        if (okay == false) {
            try { // First trying most modern browsers DOM approach
                javascript_setvalue = "document.getElementById('" + element + "').style." + attribute + "='" + value + "';";
                eval(javascript_setvalue);
                javascript_checkvalue = "document.getElementById('" + element + "').style." + attribute + "=='" + value + "';";;
                okay = eval(javascript_checkvalue);
            }
            catch (err) {}
        }
       
        if (okay == false) {
            try { // Then trying most older MSIE browsers
                javascript_setvalue = "document.all."+element+".style."+attribute+"='"+value+"';";
                eval(javascript_setvalue);
                javascript_checkvalue = "document.all."+element+".style."+attribute+"=='"+value+"';";
                okay = eval(javascript_checkvalue);
            }
            catch (err) {}
        }

        if (okay == false) {
            try {    // Finally trying old Netscape browsers
                javascript_setvalue = "document."+element+"."+attribute+"='"+value+"';";
                eval(javascript_setvalue);
                javascript_checkvalue = "document."+element+"."+attribute+"=='"+value+"';";
                okay = eval(javascript_checkvalue);
            }
            catch (err) {}
        }

        if (okay == false) {
            alert('Javascript-koden på denne side, dur desværre ikke i din browser.');
        }
}
Avatar billede sbm Nybegynder
15. september 2006 - 15:01 #1
Afsætter lige lidt flere point som lokkemad. Det er jo ikke et helt simpelt "ja/nej" spørgsmål...
Avatar billede mclemens Nybegynder
15. september 2006 - 17:24 #2
Hmm, eval - herefter tildeling og så check af value?
... Jeg ville måske lege med denne her (men synes dog
ikke ældre browsere bør være klodsen omkring benet)...

function styleSetter(element, attribute, value){

  var okay=false;

  try {if(document.getElementById(element).style[attribute]=value)okay=true;}catch(err){}
  if(!okay)try {if(document.all[element].style[attribute]=value);okay=true;}catch(err){}
  if(!okay)try {if(document[element][attribute]=value);okay=true;}catch(err){}
  if(!okay)alert('Javascript-koden på denne side, dur desværre ikke i din browser.');

}
Avatar billede mclemens Nybegynder
15. september 2006 - 17:29 #3
Ups, en lille forkortelse...

function styleSetter(element, attribute, value){

  okay=false;

  try {okay=(document.getElementById(element).satyle[attribute]=value);}catch(err){}
  if(!okay)try {okay=(document.all[element].style[attribute]=value);}catch(err){}
  if(!okay)try {okay=(document[element][attribute]=value);}catch(err){}
  if(!okay)alert('Javascript-koden på denne side, dur desværre ikke i din browser.');

}
Avatar billede mclemens Nybegynder
15. september 2006 - 17:34 #4
try {okay=(document.getElementById(element).satyle[attribute]=value);}catch(err){}
... i sidste forkortede udgave skulle have været ...
try {okay=(document.getElementById(element).style[attribute]=value);}catch(err){}
Avatar billede sbm Nybegynder
18. september 2006 - 09:26 #5
Jeg takker for feedback. Jeg prøver at få det rettet til. Smider du et svar, så jeg kan lukke?
Avatar billede sbm Nybegynder
18. september 2006 - 09:32 #6
...og hvis jeg så må give lidt feedback på DIN kode, så vil jeg foretrække noget der ligner mit format. Dit er kort og effektivt, men det er samtidig sværere at læse og forstå, hvis en anden person kommer ind og skal vedligholde det.

Jeg mener at koden helst skal være nogenlunde læsbar, og derfor undlader jeg ofte at klippe kommandoerne sammen i oneliners, selv om det kan være fristende. Og når man så lægger den større javascript kode ud i en seperat .js fil, så bliver den kun hentet første gang, og sidenhen cachet af browseren. Så derfor mener jeg det er dobbelt fjollet at bruge krudt på at gøre koden så kompakt som muligt. ;)
Avatar billede mclemens Nybegynder
18. september 2006 - 09:40 #7
Ok, her kommer lige et svar :o)

...

Det afhænger jo af ens kodevalg, men joh helt
enig oneliners, kan være svære at gennemskue :)
Avatar billede mclemens Nybegynder
18. september 2006 - 12:31 #8
Tak for 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