Avatar billede baitianlong Nybegynder
19. december 2004 - 20:03 Der er 32 kommentarer og
1 løsning

Hjælp til array funktion

Jeg er ved at lave et booking system, og har så en tabel med en kalender i. Når man klikker på en celle, skal dens id puttes ind i et array, men hvis den allerede er der, skal den ud. Og så skal cellen skifte farve.

En celle ser sådan her ud:

<td id="dag5maaned12aar2004" class="weekend" align="center" onClick="addRemove(this);">5</td>

Og her er min funktion (Jeg ved godt det langtfra er gyldigt javascript, men det var lige den bedste måde, jeg kune beskrive mit problem :)

<script type="text/javascript">
var dage = new Array();
function addRemove(obj) {
    var dagmaanedaar = obj.getId();
    if(dage.contains(dagmaanedaar)) {
        dage.remove(dagmaanedaar);
        obj.style.backgroundColor = "#6666cc";
    } else {
        dage.add(dagmaanedaar);
        obj.style.backgroundColor = "#ccff00";
    }
}
</script>

...hvordan skal det skrives?
Avatar billede olebole Juniormester
19. december 2004 - 20:22 #1
<ole>

Hvad skal du bruge array'et til? Er det bare for at holde styr på, hvilke celler, der har været klikket på? Prøv at fortælle lidt mere  :)

/mvh
</bole>
Avatar billede baitianlong Nybegynder
19. december 2004 - 20:27 #2
Man skal klikke på de dage, hvor man vil booke lejligheden, og når man så trykker "bestil" Skal jeg så lave noget databasehalløj m.v. i PHP med det array. Men den tid den sorg. Da ingen svarede her indenfor et kvarter, prøvede jeg selv lidt mere, og hænger nu her:

<script type="text/javascript">
var dage = new Array();

function contains(dma) {
    for(i=0;i<dage.length;i++) {
        if(dage[i] == dma) {
            return true;
        }
    }
    return false;
}

function remove(dma) {
    for(i=0;i<dage.length;i++) {
        if(dage[i] == dma) {
            dage[i] = null;
        }
    }
}

function addRemove(objid) {
    var dagmaanedaar = objid;
    if(contains(dagmaanedaar)) {
        remove(dagmaanedaar);
        obj.style.backgroundColor = "#6666cc";
    } else {
        dage.push(dagmaanedaar);
        obj.style.backgroundColor = "#ccff00";
    }
}
   
</script>

<td id="dag5maaned12aar2004" class="weekend" align="center" onClick="addRemove(this.id);">5</td>

Jeg tænkte at hvis mine ønskede funktioner ikke eksisterer, laver jeg dem selv :)
Avatar billede baitianlong Nybegynder
19. december 2004 - 20:30 #3
Det skulle lige være:

function addRemove(objid) {
    var dagmaanedaar = objid;
    if(contains(dagmaanedaar)) {
        remove(dagmaanedaar);
        document.getElementById(objid).style.backgroundColor = "#6666cc";
    } else {
        dage.push(dagmaanedaar);
        document.getElementById(objid).style.backgroundColor = "#ccff00";
    }
}

nu hvor jeg havde ændret parametret. Nu skifter de farve frem og tilbage, men jeg ved ikke om de ryger ind/ud af arrayet :)
Avatar billede baitianlong Nybegynder
19. december 2004 - 20:38 #4
Mine funktioner er smukke :P

<script type="text/javascript">
var dage = new Array(30);

function contains(dma) {
    for(i=0;i<dage.length;i++) {
        if(dage[i] == dma) {
            return true;
        }
    }
    return false;
}

function remove(dma) {
    for(i=0;i<dage.length;i++) {
        if(dage[i] == dma) {
            dage[i] = null;
        }
    }
}

function addRemove(objid) {
    alert(dage.toString());
    var dagmaanedaar = objid;
    if(contains(dagmaanedaar)) {
        remove(dagmaanedaar);
        document.getElementById(objid).style.backgroundColor = "#6666cc";
    } else {
        dage.push(dagmaanedaar);
        document.getElementById(objid).style.backgroundColor = "#ccff00";
    }
}
   
</script>

Det virker !! (Jeg er smuk)

...kommentarer er dog velkomne (ikke om hvor smuk jeg er, men om koden) :)
Avatar billede nikolajdu Nybegynder
19. december 2004 - 20:40 #5
sårn i den her dur?

<script type="text/javascript">
var dato = new Object();

function getDato(id) {
    this.id = id;
    da = this.id.split("_");
    this.day = da[1];
    this.month = da[2];
    this.year = da[3];
}

function addRemove(obj) {
    removed = false;
    for(i in dato){
        if(dato[i].id == obj.id){
            obj.style.backgroundColor = "#6666cc";
            delete dato[i];
            removed = true;
        }
    }
    if(!removed){
        dato[dato.length] = new getDato(obj.id);
        obj.style.backgroundColor = "#ccff00";
    }
}

</script>

<td id="date_5_12_2004" class="weekend" align="center" onClick="addRemove(this);">5</td>
Avatar billede nikolajdu Nybegynder
19. december 2004 - 20:41 #6
ho v læg lige mærke til mit "nye" dato format i Id´et
Avatar billede nikolajdu Nybegynder
19. december 2004 - 21:08 #7
hov.

var dato = new Object();

function getDato(id) {
    this.id = id;
    da = this.id.split("_");
    this.day = da[1];
    this.month = da[2];
    this.year = da[3];
}

function addRemove(obj) {
    removed = false;
    for(i in dato){
        if(dato[i].id == obj.id){
            obj.style.backgroundColor = "#6666cc";
            delete dato[i];
            removed = true;
        }
    }
    if(!removed){
        dato[obj.id] = new getDato(obj.id);
        obj.style.backgroundColor = "#ccff00";
    }
}
Avatar billede baitianlong Nybegynder
19. december 2004 - 21:11 #8
Nikolaj, eller olebole. Jeg er så rørt over mine egne funktioner, at jeg tror jeg vil bruge dem... Men når jeg så skal sende datoerne, sker der noget mystisk:

function sendDatoer() {
    var streng;
    var dag = 0;
    for(i=0;i<dage.length;i++) {
        if(dage[i] != null) {
            dag++;
            var dennedag = "dag" + dag + "=" + dage[i] + "&";
            streng += dennedag;
        }
    }
    window.location.href="opretordre.php?"+streng;
}

Den giver denne URL:

http://www.legende.dk/booking/opretordre.php?undefineddag1=dag1maaned12aar2004&dag2=dag2maaned12aar2004&dag3=dag3maaned12aar2004&dag4=dag4maaned12aar2004&

hvorfor står der undefined før dag1?
Avatar billede baitianlong Nybegynder
19. december 2004 - 21:21 #9
Prøvede med en sovsekode: streng.replace("undefineddag1", "dag1"); Men den virker heldigvis ikke... Er der ikke lige en af jer to smukke mennesker, der vil fjerne undefined fra min streng :)
Avatar billede olebole Juniormester
19. december 2004 - 21:23 #10
yups ... du definerer selv 'streng' som værende udefineret:

function sendDatoer() {
    var streng = "";
    var dag = 0;
... osv, osv ...
Avatar billede nikolajdu Nybegynder
19. december 2004 - 21:31 #11
function order(f){
    newUrl = "order.php?";
    d = 0;
    for (i in dato){
        newUrl += "dag"+ d + "=date_" + dato[i].day + "_" + dato[i].month + "_" +dato[i].year+"&";
        d++;
    }
    f.action = newUrl;
    return true;
}
<form action="order.php" method="get" onsubmit="return order(this)">
Avatar billede olebole Juniormester
19. december 2004 - 21:41 #12
... og den endnu hurtigere:

function order(f){
    var a = [];
    d = 0;
    for (i in dato){
        a.push("dag"+ d + "=date_" + dato[i].day + "_" + dato[i].month + "_" +dato[i].year);
        d++;
    }
    f.action = "order.php?" + a.join("&");
    return true;
}
<form action="order.php" method="get" onsubmit="return order(this)">

En array-buffer er hurtigere end en streng-buffer ... og så slipper vi ovenikøbet for det sidste '&'  :)
Avatar billede nikolajdu Nybegynder
19. december 2004 - 21:45 #13
ja ok godt så ;-)
Avatar billede nikolajdu Nybegynder
19. december 2004 - 21:52 #14
vil det så også være hurtigere/smartere med :

dato = new Array();

og så

dato.splice(i,1)


??
Avatar billede olebole Juniormester
19. december 2004 - 22:00 #15
Jeg er ikke helt med på, hvor du mener, Nikolaj  :)
Avatar billede nikolajdu Nybegynder
19. december 2004 - 22:02 #16
I mit forslag brugte jeg :

var dato = new Object() // delete dato[i];

Spørger bare om Array vil være hurtigere/bedre?
Avatar billede baitianlong Nybegynder
19. december 2004 - 22:05 #17
I er smukke. Men der er ingen form.

testsiden: www.legende.dk/booking/kalenderny.php

Er den nede med det?
Avatar billede nikolajdu Nybegynder
19. december 2004 - 22:07 #18
function order(){
    var a = [];
    d = 0;
    for (i in dato){
        a.push("dag"+ d + "=date_" + dato[i].day + "_" + dato[i].month + "_" +dato[i].year);
        d++;
    }
    self.location = "order.php?" + a.join("&");
}

<a href="#" onclick="order()">send lortet</a>
Avatar billede baitianlong Nybegynder
19. december 2004 - 22:08 #19
Der er noget, der er lidt noget møg...

se mine lørdage og søndage er lidt mere lyseblå. Men efter de har været igennem min funktion to gange, er de sammen farve som hverdagene pga. backgroundColor = osv. Den kan jeg ikke helt greje. Man kan vel ikke rigtig fikse det i mit script.
Avatar billede baitianlong Nybegynder
19. december 2004 - 22:12 #20
Det er ellers nogle kompakte og kønne funktioner i skriver :)
Avatar billede nikolajdu Nybegynder
19. december 2004 - 22:26 #21
var dato = new Object();

function getDato(id, end) {
    this.id = id;
    this.weekend = end;
    da = this.id.split("_");
    this.day = da[1];
    this.month = da[2];
    this.year = da[3];
}

function addRemove(obj,end) {
    removed = false;
    for(i in dato){
        if(dato[i].id == obj.id){
            obj.style.backgroundColor = "#6666cc";
            delete dato[i];
            removed = true;
        }
    }
    if(!removed){
        dato[obj.id] = new getDato(obj.id, end);
        obj.style.backgroundColor = (end)? "ffff00" : "#ccff00";
    }
}



    <td id="date_5_12_2004" class="weekend" align="center" onClick="addRemove(this,true);">5</td>
    <td id="date_7_12_2004" class="weekend" align="center" onClick="addRemove(this,false);">7 (ikke weekend);</td>
Avatar billede nikolajdu Nybegynder
19. december 2004 - 22:35 #22
retter lige til

obj.style.backgroundColor = (!end)? "#ccff00" : "ffff00";

da chancen for det ikke er weekend trods alt er størst og derfor bør komme først.
Avatar billede baitianlong Nybegynder
19. december 2004 - 22:51 #23
Nårh ja, selvfølgelig... Et parameter til :)

Ja ja, vi kan jo ikke blive ved hele natten, så smider i lige svar, gutter :)
Avatar billede baitianlong Nybegynder
19. december 2004 - 23:01 #24
Åh, nikolaj. Du har misforstået. -Det er ikke når de bliver aktiveret, der skal være farveforskel. Kig på linket og klik to gange på en weekend-dag. Så er den "mørkeblå" = hverdagsfarvet! :)
Avatar billede baitianlong Nybegynder
19. december 2004 - 23:08 #25
Jaja, så skal den jo selvfølgelig bare herop i stedet for:

if(dato[i].id == obj.id){
            obj.style.backgroundColor = (!end)? "#6666cc" : "#7777dd";
            delete dato[i];
            removed = true;
        }

Det er bare fint... Svar blot begge to :)
Avatar billede nikolajdu Nybegynder
19. december 2004 - 23:15 #26
MISFORSTÅET VOR HERRE TIL HEST!!

unction getDato(id, end) {
    this.id = id;
    this.weekend = end;
    da = this.id.split("_");
    this.day = da[1];
    this.month = da[2];
    this.year = da[3];
}

function addRemove(obj,end) {
    removed = false;
    for(i in dato){
        if(dato[i].id == obj.id){
            obj.style.backgroundColor = (!dato[i].weekend)? "#ccff00" : "ffff00";
            delete dato[i];
            removed = true;
        }
    }
    if(!removed){
        dato[obj.id] = new getDato(obj.id, end);
        obj.style.backgroundColor = "#ccff00";
    }
}
Avatar billede nikolajdu Nybegynder
19. december 2004 - 23:25 #27
sæt selv f ind i function
Avatar billede baitianlong Nybegynder
20. december 2004 - 00:23 #28
Det kan jeg ikke finde ud af (og styr lige din capslock)

ER DET HER VIRKELIG SÅ SVÆRT AT FORSTÅ:
"se mine lørdage og søndage er lidt mere lyseblå. Men efter de har været igennem min funktion to gange, er de sammen farve som hverdagene"

Svarer i?
Avatar billede nikolajdu Nybegynder
20. december 2004 - 00:41 #29
bøh.
Avatar billede baitianlong Nybegynder
20. december 2004 - 00:49 #30
Jeg tror olebole sover, og den som gemmer til natten -gemmer til katten. Så vi lukker.
Avatar billede nikolajdu Nybegynder
20. december 2004 - 00:50 #31
lol - Pas på Ole han er værre i munden end du er ;-)
Avatar billede baitianlong Nybegynder
20. december 2004 - 00:55 #32
Jeg har fundet hjælp hos http://reflectoria.com/ for de ved nemlig hvad RJ 45 er!! :P
Avatar billede olebole Juniormester
20. december 2004 - 03:22 #33
Undskyld ... nej, den aldrende piraña sov skam ikke. Den var bare igang med at kode noget af dens eget  ;D

Men, hvad skal jeg dog osse her? Jeg kan jo se, Jumpin' Jack Flash har kogt ærterne for dig  :)

Go' Jul, guys  *<();o)
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