Avatar billede learner Praktikant
18. september 2004 - 00:14 Der er 26 kommentarer og
1 løsning

Jeg får fejl og cookie bliver ikke sat som den skal!

Jeg får fejl og cookie'en bliver ikke sat!!

Der er tale om et script som bruges til at huske foretrukne annoncer/linier etc udfra liniens/annoncens id

Har forsøgt... Men jeg tror en af fejlene er her:
var status = document.form.wantsid.checked;

Hvordan skal jeg få den til at opfatte 'værdien af wantsid' i stedet for 'wantsid'?

Men jeg tror os der er en eller flere fejl! :-(

Gider du ta en hurtig kigger på det :o) :o) :o)

det er en foreach der spytter checkboxe ud og wantsid er altid et nummer > 0 !
her er checkboxene der bliver skrevet ud af php:
<input name="<?php echo $wantsid; ?>" type="checkbox" value="checked" onClick="SetFavoritWantsid('favorit_wantsids','<?php echo $wantsid; ?>')" <?php if ($favorit_wantsid_list[$wantsid]=="ja"){echo "checked";} ?>>


her er ALT JS der laver cookie'en og redigerer i cookie'en:
<script language="JavaScript" type="text/JavaScript">
    <!--
    function DelCookie (name,path,domain){
        if (getCookie(name)){
            document.cookie = name + "=" +
            ((path == null) ? "" : "; path=" + path) +
            ((domain == null) ? "" : "; domain=" + domain) +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
        }
    }
   
    function GetCookie(name){
        var cname = name + "=";             
        var dc = document.cookie;           
        if (dc.length > 0){
            begin = dc.indexOf(cname);     
            if (begin != -1){
                begin += cname.length;     
                end = dc.indexOf(";", begin);
                if (end == -1) end = dc.length;
                return unescape(dc.substring(begin, end));
            }
        }
        return null;
    }

    function WriteCookie(name, value, expires, path, domain){
        document.cookie = name + "=" + escape(value) +
        ((expires == null) ? "" : "; expires=" + expires.toGMTString()) +
        ((path == null)    ? "" : "; path=" + path) +
        ((domain == null)  ? "" : "; domain=" + domain);
    }

    function SetFavoritWantsid(cookiename,wantsid){
        var expiration = new Date();
        expiration.setTime(expiration.getTime() + 60000*24*21); // 21 dage
        var OldCookie    = GetCookie(cookiename);
        var NewCookie    = "";
        var sep        = "*";
        var arr        = OldCookie.split("*");
       
        var status        = document.form.wantsid.checked;
        if(status){
            if ((OldCookie=="")||(!OldCookie)){
                NewCookie = wantsid;
            } else {
                NewCookie = OldCookie + sep + wantsid;
            }
            WriteCookie(cookiename,NewCookie,expiration);
            alert('Føjet til dine foretrukne!');
        }
       
        if(!status){
            // Denne wantsid skal fjernes fra cookien, hvis den er deri!
            if (OldCookie==wantsid){
                // der var kun denne wantsid tilbage i cookien og den skal derfor slettes helt.
                DelCookie(cookiename);
            } else{
                // der er en gammel cookie med nogle wantsid i
                for(i in arr)if(arr[i]==wantsid)arr.splice(i,1);
                NewCookie=arr.join("*");
                WriteCookie(cookiename,NewCookie,expiration);
            }
            alert('Fjernet fra dine foretrukne!');
        }
    }
    //-->
</script>


TAAAAAK :-)
Avatar billede roenving Novice
18. september 2004 - 11:51 #1
Hvis du har flere checkbokse med navnet 'wantsid' skal du have fat i dem een ad gangen:

      var status = document.form.wantsid[0].checked;

... osv.

Du bliver altså nødt til at lave en løkke til at aflæse dem !-)
Avatar billede learner Praktikant
18. september 2004 - 12:47 #2
JA, jeg har flere checkboxe, men de hedder ikke wantsid! de hedder feks 44 65 osv.
for $wantsid er altid et nummer og jeg gør jo sådan her name="<?php echo $wantsid; ?>"

Men hvordan foreslår du så at jeg skal gøre? :)
Avatar billede roenving Novice
18. september 2004 - 13:13 #3
Sådan !-)

<input name="<?php echo $wantsid; ?>" type="checkbox" value="checked" onClick="SetFavoritWantsid('favorit_wantsids',this)" <?php if ($favorit_wantsid_list[$wantsid]=="ja"){echo "checked";} ?>>

function SetFavoritWantsid(cookiename,wantsid){
        var expiration = new Date();
        expiration.setTime(expiration.getTime() + 1000*60*60*24*21); // 21 dage
        var OldCookie    = GetCookie(cookiename);
        var NewCookie    = "";
        var sep        = "*";
        var arr        = OldCookie.split("*");
       
        var status        = wantsid.checked;
        if(status){
            if ((OldCookie=="")||(!OldCookie)){
                NewCookie = wantsid.name;
            } else {
                NewCookie = OldCookie + sep + wantsid.name;
            }
            WriteCookie(cookiename,NewCookie,expiration);
            alert('Føjet til dine foretrukne!');
        }
       
        if(!status){
            // Denne wantsid skal fjernes fra cookien, hvis den er deri!
            if (OldCookie==wantsid.name){
                // der var kun denne wantsid tilbage i cookien og den skal derfor slettes helt.
                DelCookie(cookiename);
            } else{
                // der er en gammel cookie med nogle wantsid i
                for(i in arr)if(arr[i]==wantsid.name)arr.splice(i,1);
                NewCookie=arr.join("*");
                WriteCookie(cookiename,NewCookie,expiration);
            }
            alert('Fjernet fra dine foretrukne!');
        }
    }

-- for når vi nu alligevel kalder fra checkboksen, kan vi ligesågodt sende boksen med !-)

-- og så vil jeg da lige gøre opmærksom på, at det er en dårlig idé at have navne, som starter eller kun består af tal, da det i en masse sammenhænge kan give problemer, i nogle sammenhænge er det endda forbudt, så udform dem altid med mindst et bogstav i starten !o]
Avatar billede learner Praktikant
19. september 2004 - 17:23 #4
Jamen, det var jo lige i øjet! :o) Tak!


Vedr navnet skal være med bogstav i starten, det vidste jeg ikke! Men jeg kan sagtens forestille mig at der kan opstå forvirring! Det vil jeg huske fremover!

Jeg gør bare sådan her og så er det ik kun et tal:
<input name="number<?php echo $wantsid; ?>" type="checkbox" value="checked" onClick="SetFavoritWantsid('favorit_wantsids',this)" <?php if ($favorit_wantsid_list[$wantsid]=="ja"){echo "checked";} ?>>

Jeg tester det lige :o)
Og skriver igen.

I mellemtiden kan du jo smide et svar, for jeg tror det virker nu! :o)
Avatar billede roenving Novice
19. september 2004 - 17:32 #5
-- en identifier, som starter med et tal, er ulovlig i hvert fald, hvis den skal bruges som javascript identifier (f.eks. document.formIdentifier.feltIndentifier eller variabelIdentifier) eller hvis den bruges som et id på et html-element, så det er bare en god vane altid at starte med et bogstav (eller underscore _ i en javascript-ting !-)

-- velbekomme '-)
Avatar billede learner Praktikant
19. september 2004 - 18:01 #6
hvad gør 'this' i (,this)
Avatar billede roenving Novice
19. september 2004 - 18:03 #7
Den medsender selve checkbox-objektet som parameter til funktionen, og derfor kan vi få fat i elementets name-attribut vha. elm.name !-)
Avatar billede learner Praktikant
19. september 2004 - 18:14 #8
Okay, kan men os få fat i value på samme måde? elm.value
Avatar billede roenving Novice
19. september 2004 - 18:18 #9
Præcis ja ...

-- som du kan se bruger jeg også elm.checked for at få fat i, om checkboxen er afkrydset !o]

-- langt de fleste attributter kan hentes fra objektet som properties (eller sættes !-)
Avatar billede learner Praktikant
19. september 2004 - 18:28 #10
Okay!

Mærkeligt, jeg får stadig en JS-fejl...


Her er det hele:

Først checkboxen, som jeg har ændret lidt i onclick og i value og i name:

<input type="checkbox" name="number<?php echo $wantsid; ?>" value="<?php echo $wantsid; ?>" onClick="SetFavorit('favorit_wantsids',this)" <?php if ($favorit_wantsid_list[$wantsid]=="ja"){echo "checked";} ?> title="Gem denne efterlysning i dine foretrukne!">



Og her scriptet, som jeg har ændret lidt.
Jeg har sat elm.value istedet for elm.name mest fordi name nu er blevet ændret til numberxxx
og jeg har ændret wantsid til ThisBox for ordens skyld!

function SetFavorit(cookiename,ThisBox){
        var expiration = new Date();
        expiration.setTime(expiration.getTime() + 1000*60*60*24*21); // 21 dage
        var OldCookie    = GetCookie(cookiename);
        var NewCookie    = "";
        var sep        = "*";
        var arr        = OldCookie.split("*");
       
        var status        = ThisBox.checked;
        if(status){
            if ((OldCookie=="")||(!OldCookie)){
                NewCookie = ThisBox.value;
            } else {
                NewCookie = OldCookie + sep + ThisBox.value;
            }
            WriteCookie(cookiename,NewCookie,expiration);
            alert('Føjet til dine foretrukne!');
        }
       
        if(!status){
            // Denne wantsid skal fjernes fra cookien, hvis den er deri!
            if (OldCookie==ThisBox.value){
                // der var kun denne wantsid tilbage i cookien og den skal derfor slettes helt.
                DelCookie(cookiename);
            } else{
                // der er en gammel cookie med nogle wantsid i
                for(i in arr)if(arr[i]==ThisBox.value)arr.splice(i,1);
                NewCookie=arr.join("*");
                WriteCookie(cookiename,NewCookie,expiration);
            }
            alert('Fjernet fra dine foretrukne!');
        }
    }

Er der noget galt???
eller kan det være i de andre function's(Getcookie osv.) fejlen ligger?
Avatar billede roenving Novice
19. september 2004 - 18:34 #11
En gennemlæsning giver ikke grund til at tro, at der er fejl i det viste ...

Men hvilken fejl får du ?-)
Avatar billede learner Praktikant
19. september 2004 - 18:38 #12
Jeg får ikke nogen:
alert('xxxxx xxxx xxx')

Men jeg får istedet explorers scriptfejl-meddelelse!!..

Jeg smider lige alle mine functions!

Jeg har siddet og kigget på dem og kan ikke se fejlen! Men noget må være galt! :o)

her:

<script language="JavaScript" type="text/JavaScript">
    <!--
    function DelCookie (name,path,domain){
        if (getCookie(name)){
            document.cookie = name + "=" +
            ((path == null) ? "" : "; path=" + path) +
            ((domain == null) ? "" : "; domain=" + domain) +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
        }
    }
   
    function GetCookie(name){
        var cname = name + "=";             
        var dc = document.cookie;           
        if (dc.length > 0){
            begin = dc.indexOf(cname);     
            if (begin != -1){
                begin += cname.length;     
                end = dc.indexOf(";", begin);
                if (end == -1) end = dc.length;
                return unescape(dc.substring(begin, end));
            }
        }
        return null;
    }

    function WriteCookie(name, value, expires, path, domain){
        document.cookie = name + "=" + escape(value) +
        ((expires == null) ? "" : "; expires=" + expires.toGMTString()) +
        ((path == null)    ? "" : "; path=" + path) +
        ((domain == null)  ? "" : "; domain=" + domain);
    }

    function SetFavorit(cookiename,ThisBox){
        var expiration = new Date();
        expiration.setTime(expiration.getTime() + 1000*60*60*24*21); // 21 dage
        var OldCookie    = GetCookie(cookiename);
        var NewCookie    = "";
        var sep        = "*";
        var arr        = OldCookie.split("*");
       
        var status        = ThisBox.checked;
        if(status){
            if ((OldCookie=="")||(!OldCookie)){
                NewCookie = ThisBox.value;
            } else {
                NewCookie = OldCookie + sep + ThisBox.value;
            }
            WriteCookie(cookiename,NewCookie,expiration);
            alert('Føjet til dine foretrukne!');
        }
       
        if(!status){
            // Denne wantsid skal fjernes fra cookien, hvis den er deri!
            if (OldCookie==ThisBox.value){
                // der var kun denne wantsid tilbage i cookien og den skal derfor slettes helt.
                DelCookie(cookiename);
            } else{
                // der er en gammel cookie med nogle wantsid i
                for(i in arr)if(arr[i]==ThisBox.value)arr.splice(i,1);
                NewCookie=arr.join("*");
                WriteCookie(cookiename,NewCookie,expiration);
            }
            alert('Fjernet fra dine foretrukne!');
        }
    }
   
    function FocusSearchField() {
        if (document.form.searchword.value == 'Søg i tekst') {
            document.form.searchword.value = '';
        }
    }
    //-->
</script>
Avatar billede roenving Novice
19. september 2004 - 18:44 #13
Kan du ikke lige fortælle hvad fejlmeddelelsen er, og hvilken linje, den peger på !-)
Avatar billede learner Praktikant
19. september 2004 - 18:48 #14
Det siger den ikke, jeg kan ikke nå at læse den, den er hurtigt væk igen. blinker bare! Men måske er fejlen et helt andet sted :-)

Jeg kommer i tanke om at jeg har nogle andre steder på siden fejlen kan opstå. Jeg skal lige over til svigerfamilien og spise. Kigger på det i morgen tidlig med friske øjne og skriver herinde igen.

Tusind tak :O)
Avatar billede roenving Novice
19. september 2004 - 18:54 #15
Kan du ikke dobbeltklikke på advarselstrekanten i hjørnet ?-)
Avatar billede learner Praktikant
19. september 2004 - 22:02 #16
den siger:
Problemet med denne webside kan forhindre den i at blive vist korrekt eller fungere korrekt osv....
Avatar billede roenving Novice
19. september 2004 - 22:04 #17
Ja, og så er der en specifik fejlmeddelelse i detaljer ...
Avatar billede learner Praktikant
20. september 2004 - 07:26 #18
Nej, desværre ikke! Ikke i min browser! Og hvis jeg dobbeltklikker på den gule trekant, så blinker meddelelsen blot fre i et halvt sekundt. Men jeg har klikket og klikket og jeg kan se at det bare er en standartbesked. Ikke nogen specifik fejlmeddelelse. Æv

Men scriptfejlen opstår kun når jeg trykker på checkboxen.

Jeg har os prøvet at kigge i mozilla, men den melder slet ingen fejl overhovedet.

Jeg får stadig ikke den alert()

Jeg har testet det ud og i øvrigt fundet ud af at cookien heller ikke bliver sat!

Så noget må der være galt!. Og jeg kan ik se det! ingen idé!

Derfor ser min kode stadig ud som ovenfor!

:o)
Avatar billede learner Praktikant
20. september 2004 - 10:00 #19
Kan det være her:
var arr        = OldCookie.split("*");

Skal man skrive 'var' der?
Avatar billede learner Praktikant
20. september 2004 - 10:54 #20
Ellers tror jeg fejlen er i en af disse function's:


    function DelCookie (name,path,domain){
        if (getCookie(name)){
            document.cookie = name + "=" +
            ((path == null) ? "" : "; path=" + path) +
            ((domain == null) ? "" : "; domain=" + domain) +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
        }
    }
   
    function GetCookie(name){
        var cname = name + "=";             
        var dc = document.cookie;           
        if (dc.length > 0){
            begin = dc.indexOf(cname);     
            if (begin != -1){
                begin += cname.length;     
                end = dc.indexOf(";", begin);
                if (end == -1) end = dc.length;
                return unescape(dc.substring(begin, end));
            }
        }
        return null;
    }

    function WriteCookie(name, value, expires, path, domain){
        document.cookie = name + "=" + escape(value) +
        ((expires == null) ? "" : "; expires=" + expires.toGMTString()) +
        ((path == null)    ? "" : "; path=" + path) +
        ((domain == null)  ? "" : "; domain=" + domain);
    }
Avatar billede learner Praktikant
20. september 2004 - 13:57 #21
Hjææææælp :-O

Jeg forhøjer point!
Avatar billede learner Praktikant
20. september 2004 - 14:04 #22
Her er mit kode! Det er lidt ændret, for jeg har prøvet at fjerne fejlen på forskellig vis! Jeg får stadig Javascript-fejl og kan ikke finde ud af hvad jeg gør forkert! PLEEEEEAAAASE Hjælp mig!

først checkboxen og derefter javascriptet:

<input type="checkbox" name="number<?php echo $wantsid; ?>" value="<?php echo $wantsid; ?>" onClick="SetFavorit('favorit_wantsids',this,'<?php echo $wantsid; ?>')" <?php if ($favorit_wantsid_list[$wantsid]=="ja"){echo "checked";} ?> title="Gem denne efterlysning i dine foretrukne!">



function DelCookie (name,path,domain){
    if (getCookie(name)){
        document.cookie = name + "=" +
        ((path == null) ? "" : "; path=" + path) +
        ((domain == null) ? "" : "; domain=" + domain) +
        "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}

function GetCookie(name){
    var cname = name + "=";             
    var dc = document.cookie;           
    if (dc.length > 0){
        begin = dc.indexOf(cname);     
        if (begin != -1){
            begin += cname.length;     
            end = dc.indexOf(";", begin);
            if (end == -1) end = dc.length;
            return unescape(dc.substring(begin, end));
        }
    }
    return null;
}

function WriteCookie(name, value, expires, path, domain){
    document.cookie = name + "=" + escape(value) +
    ((expires == null) ? "" : "; expires=" + expires.toGMTString()) +
    ((path == null)    ? "" : "; path=" + path) +
    ((domain == null)  ? "" : "; domain=" + domain);
}

function SetFavorit(cookiename,ThisBox,wantsid){
    var expiration = new Date();
    expiration.setTime(expiration.getTime() + 1000*60*60*24*21); // 21 dage
    var OldCookie    = GetCookie(cookiename);
    var NewCookie    = "";
    var sep        = "*";
    var arr        = OldCookie.split("*");
   
    var status        = ThisBox.checked;
    if(status){
        if (!OldCookie){
            NewCookie = wantsid;
        } else {
            NewCookie = OldCookie + sep + wantsid;
        }
        WriteCookie(cookiename,NewCookie,expiration);
        alert('Føjet til dine foretrukne!');
    }
   
    if(!status){
        // Denne wantsid skal fjernes fra cookien, hvis den er deri!
        if (OldCookie==wantsid){
            // der var kun denne wantsid tilbage i cookien og den skal derfor slettes helt.
            DelCookie(cookiename);
        } else{
            // der er en gammel cookie med nogle wantsid i
            for(i in arr)if(arr[i]==wantsid)arr.splice(i,1);
            NewCookie=arr.join("*");
            WriteCookie(cookiename,NewCookie,expiration);
        }
        alert('Fjernet fra dine foretrukne!');
    }
}
Avatar billede roenving Novice
20. september 2004 - 14:50 #23
Tjah en af den slags tavetosser, som er svære at finde, samt en grundlæggende brøler, som jeg havde glemt fra jeg første gang kiggede mistænksomt på den ...

<input type="checkbox" name="number44" value="44" onClick="SetFavorit('favorit_wantsids',this)" title="Gem denne efterlysning i dine foretrukne!">
<input type="checkbox" name="number45" value="45" onClick="SetFavorit('favorit_wantsids',this)" title="Gem denne efterlysning i dine foretrukne!">


<script type="text/javascript">
function DelCookie (name,path,domain){
    if (GetCookie(name)){
        document.cookie = name + "=" +
        ((path == null) ? "" : "; path=" + path) +
        ((domain == null) ? "" : "; domain=" + domain) +
        "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}

function GetCookie(name){
    var cname = name + "=";             
    var dc = document.cookie;           
    if (dc.length > 0){
        begin = dc.indexOf(cname);     
        if (begin != -1){
            begin += cname.length;     
            end = dc.indexOf(";", begin);
            if (end == -1) end = dc.length;
            return unescape(dc.substring(begin, end));
        }
    }
    return null;
}

function WriteCookie(name, value, expires, path, domain){
    document.cookie = name + "=" + escape(value) +
    ((expires == null) ? "" : "; expires=" + expires.toGMTString()) +
    ((path == null)    ? "" : "; path=" + path) +
    ((domain == null)  ? "" : "; domain=" + domain);
}

function SetFavorit(cookiename,ThisBox){
    var expiration = new Date();
    expiration.setTime(expiration.getTime() + 1000*60*60*24*21); // 21 dage
    var OldCookie    = GetCookie(cookiename);
    var NewCookie    = "";
    var sep        = "*";
    var arr        = (OldCookie)?OldCookie.split("*"):"";
   
    if(ThisBox.checked){
        if (!OldCookie){
            NewCookie = ThisBox.value;
        } else {
            NewCookie = OldCookie + sep + ThisBox.value;
        }
        WriteCookie(cookiename,NewCookie,expiration);
        alert('Føjet til dine foretrukne!');
    }else{
        // Denne wantsid skal fjernes fra cookien, hvis den er deri!
        if (OldCookie==ThisBox.value){
            // der var kun denne wantsid tilbage i cookien og den skal derfor slettes helt.
            DelCookie(cookiename);
        } else{
            // der er en gammel cookie med nogle wantsid i
            for(i in arr)if(arr[i]==ThisBox.value)arr.splice(i,1);
            NewCookie=arr.join("*");
            WriteCookie(cookiename,NewCookie,expiration);
        }
        alert('Fjernet fra dine foretrukne!');
    }
}
</script>
Avatar billede learner Praktikant
20. september 2004 - 15:14 #24
Jeps :o) Nu lykkes det! Det virker!

Jeg kan ikke umiddelbart se hvor du har rettet, men er det den if (status)??

TUUUUUUUSSSSSIIIIIIINNNNNNDDDD TAAAAK :o)

Hold da k... hvor var jeg træt af den fejl :-)

mange mange tak!
Avatar billede learner Praktikant
20. september 2004 - 15:16 #25
Tak for det :)
Avatar billede roenving Novice
20. september 2004 - 15:31 #26
Nej, to fejl:

function DelCookie (name,path,domain){
    if (GetCookie(name)){

-- GetCookie var skrevet med lille ...

og

    var arr        = (OldCookie)?OldCookie.split("*"):"";

-- hvis OldCookie ikke findes kan man ikke udføre en split på den !-)

Den der med status, var bare en lille forenkling ...
Avatar billede learner Praktikant
20. september 2004 - 15:35 #27
OK, så forstår jeg det! Tak
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