Avatar billede donh Nybegynder
31. juli 2009 - 16:48 Der er 4 kommentarer

Hjælp til cookie script

Hej.. jeg indrømmer jeg er en nød til javascript, men jeg har fundet sådan et lækkert prefil script til forms, og jeg har fået det til at virke... men desværre er der en ting i vejen:

Hvis man i en <select> i formen vælger en option nr. 10 eller derover så bliver det ikke prefilled næste gang man besøger siden med formen... kun de første 9 options gør det... og da jeg ikke fatter meget af scripten.. så håbede jeg nogen her kunne se hvad der skal til...

Her er script:

var expDays = 100;
var exp = new Date();
exp.setTime(exp.getTime() + (expDays*24*60*60*1000));

function getCookieVal (offset) { 
    var endstr = document.cookie.indexOf (";", offset); 
    if (endstr == -1) { endstr = document.cookie.length; }
    return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie (name) { 
    var arg = name + "="; 
    var alen = arg.length; 
    var clen = document.cookie.length; 
    var i = 0; 
    while (i < clen) {   
        var j = i + alen;   
        if (document.cookie.substring(i, j) == arg) return getCookieVal (j);   
        i = document.cookie.indexOf(" ", i) + 1;   
        if (i == 0) break; 
    } 
    return null;
}

function SetCookie (name, value) { 
    var argv = SetCookie.arguments; 
    var argc = SetCookie.arguments.length; 
    var expires = (argc > 2) ? argv[2] : null; 
    var path = (argc > 3) ? argv[3] : null; 
    var domain = (argc > 4) ? argv[4] : null; 
    var secure = (argc > 5) ? argv[5] : false; 
    document.cookie = name + "=" + escape (value) +
    ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
    ((path == null) ? "" : ("; path=" + path)) + 
    ((domain == null) ? "" : ("; domain=" + domain)) +   
    ((secure == true) ? "; secure" : "");
}

function cookieForms() { 
    var mode = cookieForms.arguments[0];
    for(f=1; f<cookieForms.arguments.length; f++) {
        formName = cookieForms.arguments[f];
        if(mode == 'open') {   
            cookieValue = GetCookie('saved_'+formName);
            if(cookieValue != null) {
                var cookieArray = cookieValue.split('#cf#');
                if(cookieArray.length == document[formName].elements.length) {
                    for(i=0; i<document[formName].elements.length; i++) {
                        if(cookieArray[i].substring(0,6) == 'select') { document[formName].elements[i].options.selectedIndex = cookieArray[i].substring(7, cookieArray[i].length-1); }
                        else if((cookieArray[i] == 'cbtrue') || (cookieArray[i] == 'rbtrue')) { document[formName].elements[i].checked = true; }
                        else if((cookieArray[i] == 'cbfalse') || (cookieArray[i] == 'rbfalse')) { document[formName].elements[i].checked = false; }
                        else { document[formName].elements[i].value = (cookieArray[i]) ? cookieArray[i] : ''; }
                    }
                }
            }
           
        }

        if(mode == 'save') {   
            cookieValue = '';
            for(i=0; i<document[formName].elements.length; i++) {
                fieldType = document[formName].elements[i].type;
                if(fieldType == 'password') { passValue = ''; }
                else if(fieldType == 'checkbox') { passValue = 'cb'+document[formName].elements[i].checked; }
                else if(fieldType == 'radio') { passValue = 'rb'+document[formName].elements[i].checked; }
                else if(fieldType == 'select-one') { passValue = 'select'+document[formName].elements[i].options.selectedIndex; }
                else { passValue = document[formName].elements[i].value; }
                cookieValue = cookieValue + passValue + '#cf#';
            }
            cookieValue = cookieValue.substring(0, cookieValue.length-4); // Remove last delimiter
            SetCookie('saved_'+formName, cookieValue, exp);       
        }   
    }
}
Avatar billede Slettet bruger
31. juli 2009 - 17:37 #1
Hvad er det meningen at scriptet skal gøre, og kan du give os et link til en side med fejlen?
Avatar billede donh Nybegynder
31. juli 2009 - 18:56 #2
Hej Kimsey.... her er et link:

http://www.donh.dk/form-prefil/newwebsite-registerpage.html

Meningen er at når man har udfyldt og sendt formen, så næste gang man kommer ind på siden, så skal den automatisk udfylde formen via informationer fra en cookie.

Det virker alt sammen... MEN... hvis man i country dropdown'en vælger Australia (option nr. 10) og resten af landene under den... så bliver det ikke prefilled næste gang du besøger siden... det er lige som om, at den kun godtager 9 options i en dropdown... og det er jo ikke så fedt, når der er mange lande...

Det jeg gerne vil, at at kunne have "uendelig" options til rådighed i en dropdown... og at de bliver prefilled ved næste besøg.. og ikke kun de første 9 options


Håber du... eller anden kan hjælpe med at rette scriptet til
Avatar billede Slettet bruger
31. juli 2009 - 19:47 #3
Form2Cookie scriptet er helt fint og "renligt" men det er det script du bruger til at fylde Country boksen til gengæld ikke.
Du kan se hvad jeg mener her:
http://www.zmags.com/NewWebsite/form-script.js?zddcddssxdcdxxccdcdddddee

Jeg vil helt klart anbefale at du laver din egen liste i stedet. Det vil med 99% chance ordne til problem. Jeg kan godt hjælpe dig lidt med at automatisere det, så du ikke behøver at skrive det hele af.
Avatar billede donh Nybegynder
31. juli 2009 - 20:17 #4
Så du mener problemet ligger i country scriptet!... jeg havde også problemet, hvis jeg tilføjede nogle options i job function.

Er godt klar over, at counrty scriptet nok ikke er smukt, men det virker (virkede)... jeg kan dog ikke selv lave dem pænere, og den funktionalitet der sker i formen, når man vælger UK eller US er vigtig at have med.

Kender du til en nem løsning?... fx et sted man kan hente/finde sådan et tilsvarende script til fri afbenyttelse?

ellers ville det være til stor hjælp, hvis du kunne give mig et eksempel på, hvordan jeg kan have et array med lande (ligesom det i scriptet) i js filen, og så få dem tilføjet i counrty select tag'et i formen... håber du forstår hvad jeg mener... gerne med 2 værdier... (lige som her Bermuda:Bermuda|\)... så det ene går i value="" og det andet er det visuelle i formen.

Er det noget du kan gøre hurtigt?
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