Avatar billede ivildrede Nybegynder
04. august 2003 - 07:13 Der er 10 kommentarer og
2 løsninger

Jeg fatter det ik'

Hej

Jeg må indrømme at jeg har haft spørgsmålet i før men det gav ikke rigtigt bonus - derfor er det her endnu engang.

Hvordan virker det med de her bokse, som er her på eksperten, jeg bruger samme kode som "eksperten". Det virker fint nok med at åbne og lukke boksene, der bliver også skrevet en cookie på min maskine - med de rigtige værdier men hvordan får jeg trukket de værdier ud igen det kan jeg ikke lurer.

Scriptet skal bruges på en alm. HTML side.

jeg vil gerne have en forklaring, ikke bare en løsning, jeg skal jo lære noget ;-)

og så lige koden:

// cookie_expire
    var cookie_expire = new Date();
    cookie_expire.setMilliseconds(cookie_expire.getMilliseconds()+(60*60*24*90*1000));
    cookie_expire = cookie_expire.toGMTString();
    // cookie_domain
    var cookie_domain = '.' + location.host;
    pos_dot = location.host.lastIndexOf('.');
    if (pos_dot != -1) {
        pos_dot = location.host.lastIndexOf('.', pos_dot - 1);
        if (pos_dot != -1) {
            var cookie_domain = location.host.substring(pos_dot, location.host.length);
        }
    }

    if (top.location != self.location) {
        top.location.href = self.location;
    }

    if (location.host.indexOf('eksperten.dk') != -1) {
        window.onerror = null;
    }

    function get_id (id) {
        if (document.all && document.getElementById) {            //IE5+
            return document.all(id);
        } else if (!document.all && document.getElementById) {    //NS6+
            return document.getElementById(id);
        } else {    // !IE5+ && !NS6+
            return false;
        }
    }

    function box_click (id) {
        if (document.all && document.getElementById) {            //IE5
            btitle = document.all(id).style;
            bcontent = document.all(id+'c').style;
            img = document.all(id+'i');
        } else if (!document.all && document.getElementById) {    //NS6
            btitle = document.getElementById(id).style;
            bcontent = document.getElementById(id+'c').style;
            img = document.getElementById(id+'i');
        } else {    // !IE5 && !NS6
            return false;
        }
        if (bcontent.visibility == 'hidden') {
            bcontent.display = '';
            bcontent.visibility = 'visible';
            btitle.cursor = 'hand';
            img.src = '/img/arrow-down.gif';
            set_cookie('box['+id+']',1,cookie_expire,'/',cookie_domain);
        } else {
            bcontent.display = 'none';
            bcontent.visibility = 'hidden';
            btitle.cursor = 'hand';
            img.src = "/img/arrow-right.gif";
            set_cookie('box['+id+']',0,cookie_expire,'/',cookie_domain);
        }
    }

    function list_active (id) {
        set_cookie('box['+id+']',1,cookie_expire,'/',cookie_domain);
        document.location.href = self.location;
    }

    function get_cookie (name) {
        var start = document.cookie.indexOf(name + '=');
        var len = start + name.length + 1;
        if ((!start) && (name != document.cookie.substring(0, name.length))) {
            return null;
        }
        if (start == -1) {
            return null;
        }
        var end = document.cookie.indexOf(';', len);
        if (end == -1) {
            end = document.cookie.length;
        }
        return unescape(document.cookie.substring(len, end));
    }

    function set_cookie (name, value, expires, path, domain, secure) {
        document.cookie = name + '=' + escape(value) + ((expires) ? '; expires=' + expires : '') + ((path) ? '; path=' + path : '') + ((domain) ? '; domain=' + domain : '') + ((secure) ? '; secure' : '');
    }
/ivildrede
Avatar billede TRoXa Novice
04. august 2003 - 09:54 #1
du skal vel bare bruge funktionen get_cookie(name) med fx get_cookie('box['+id+']'
Avatar billede roenving Novice
04. august 2003 - 15:44 #2
Jeg lavede dette sammen med en anden bruger for et godt stykke tid siden -- ved ikke om du kan bruge det ...

<SCRIPT LANGUAGE="javascript" TYPE="text/javascript">
ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false
ie5 =(document.getElementById)? true:false
ns6 = (document.getElementById && !document.all)?true:false;

function ShowHide(id){
var act = "0";
var styleObj = (ns4)? document.layers[id] : (ie4)? document.all[id].style : document.getElementById(id).style;
if(styleObj.display == "none"){
styleObj.display = "";
act = "1";
}else{
styleObj.display = "none"
}
updateCookie(id,act);
}

function updateCookie(id,act){
    var found = false;
    if(document.cookie){
        var oldCook = document.cookie;
        var tmp = oldCook.split(";");
        for (i=0;tmp.length>i;i++){
            if (tmp[i].indexOf("ShowHide=")!=-1){
                newCook = tmp[i].substring(9+tmp[i].indexOf("ShowHide=")).split(":");
                found = true;
                break;
            }
        }
        var updated = false;
        if (found){
        for (i=0;newCook.length>i;i++){
            if (newCook[i].indexOf(id+"-")==0){
                newCook[i] = id+"-"+act;
                updated = true;
                break;
            }
        }
        }else{newCook = new Array();}
        if(!updated){
            newCook[newCook.length] = id+"-"+act;
        }
    }else{
        newCook = new Array();
        newCook[0] = id+"-"+act;
    }
    var exp = new Date();
    exp.setYear(exp.getFullYear()+1);//cookien gælder et år
    var txt = "ShowHide="+newCook.join(":")+"; expires="+exp.toGMTString()+"; path=/; domain=.surfersinfo.dk";
    document.cookie = txt;
}

function updateShowHide(){
    if (document.cookie){
        var tmp = document.cookie.split(";");
        var cook = false;
        for (i=0;tmp.length>i;i++){
            if (tmp[i].indexOf("ShowHide=")!=-1){
                newCook = tmp[i].substring(9+tmp[i].indexOf("ShowHide=")).split(":");
                cook = true;
                break;
            }
        }
        if(cook){
            for (i=0;newCook.length>i;i++){
                id = newCook[i].substring(0,newCook[i].indexOf("-"));
                act = newCook[i].charAt(newCook[i].length-1);
                var styleObj = null;
                if(ns4){
                    styleObj = document.layers[id];
                }else    if(ie4){
                      if (document.all[id]){styleObj = document.all[id].style;}
                  }else{
                    if (document.getElementById(id)){styleObj = document.getElementById(id).style;}
                  }
                if (styleObj){
                    if(act==0){
                        styleObj.display = "none";
                    }else{
                        styleObj.display = "";
                    }
                }
            }
        }
    }
}
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" ONLOAD="updateShowHide()">

-- og feel free to ask anything -- også om dit eget script !-)
Avatar billede ivildrede Nybegynder
04. august 2003 - 16:59 #3
roenvig - det virker men jeg ville jo gerne have forklaret scriptet som de bruger her på eksperten, bare den del med at at hente værdien fra cookien...
Avatar billede roenving Novice
04. august 2003 - 17:14 #4
Den fra E* har jeg på et tidspunkt kigget på, men har ikke helt gennemgået den ...

Men såvidt jeg umiddelbart kan se er det php-scriptet som genererer åbne og lukkede boxe ...
Avatar billede roenving Novice
04. august 2003 - 17:16 #5
Men der står noget i min cookie om boxe, og det gør der ikke i de .js-scripts, som ligger her, så mon ikke php-scriptet henter cookie-værdierne under generereringen af koden !-)
Avatar billede ivildrede Nybegynder
04. august 2003 - 17:33 #6
udmiddelbart ser det sådan ud,kan du rette dit script så det også skifter et icon ?
Avatar billede roenving Novice
04. august 2003 - 18:00 #7
Ja, i ovennævnte er det jo visning af objekter, men ellers skal du i stedet for etellerandet objekt.style have fat i dit imageobjekt og så skifte .src ud med urlen til den anden grafik-fil ...
Avatar billede ivildrede Nybegynder
04. august 2003 - 18:10 #8
okay drop et et svar og du får point'ne
Avatar billede roenving Novice
04. august 2003 - 23:43 #9
Velbekomme '-)
Avatar billede ivildrede Nybegynder
04. august 2003 - 23:53 #10
Da scriptet allerede lægger her på E* under andre spørgsmål får du kun 50 point - er det ok
Avatar billede roenving Novice
05. august 2003 - 01:24 #11
-- 50 points er iorden for svaret -- og jeg takker for points ;~}


-- men i princippet er det ikke iorden at du afleverer et andet antal points end du har udlovet, medmindre der er grunde til det, som gør svaret ubrugeligt -- eller du f.eks. selv i mellemtiden har fundet en kilde, som i tråden kan bruges til at kvalificere svaret ...

-- hvis du havde brugt E's søgemaskine og fundet svaret ville det jo have været iorden også, og du måtte også gerne have oprettet et spm, som hed f.eks.:

Jeg har fundet http://www.exp.dk/spm/kjhiuh -- der er en løsning, som næsten er hvad jeg har brug for, men osv...

og så have udlovet 2 eller 50 points for det

-- jeg havde gerne brugt mine kræfter, så det er kun principielt der er et problem !-)
Avatar billede ivildrede Nybegynder
05. august 2003 - 01:37 #12
Ja jeg burde nok ha' formuleret mit spørgsmål  "kan du rette dit script så det også skifter et icon ?" bedre. Jeg nok forventet at se en løsning på ændringen af koden eller en forklaring på hvodan den fungerer - som jeg også skriver i mit 1.spørgsmål men igen formuleringen var nok ikke det den skulle være.

Nå det går nok ;-)
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