Ace har bragt dette til verden:
> Birger Sørensen skrev:
>
>> Det kan du gøre ved at cheke på om der eksisterer et element med den
>> givne id.
>> Hvis der gør det, kan du ændre innerHTML - og ellers oprette et nyt.
>> (Ikke helt sikker på hvordan du generer id'erne - men du skal være
>> sikker på at den samme vare altid generer samme id - evt. bruge
>> noget unikt for varen - et forslag kunne være en kombination af
>> varenummer og det du har i sidste kolonne).
>
> Hmm, nej okay nu hvor du nævner det, kan jeg godt se, at id'erne
> genereres udfra variablen divIdName = 'cart'+num+'Div'; og num er jo
> innerHTML'en fra div'en productOrder, hvilket får sin tekst fra
> værdierne i de eksisterende elementer. Dette vil unægtelig skabe
> problemer, da det er ret sandsynligt at man vil have det samme antal af
> forskellige varer. Men kan man ikke bare gøre således, at de nye div'er
> bare får tildelt id="1", id="2", id="3" etc.?
Det hjælper dig ikke til at finde bestillingen for en given vare, uden
du også registrerer det id du giver til den div der indholder
registreringen.
Det kan lade sig gøre - men det er enklere at bestillingen for en given
vare, får et givent (unikt) id.
Jeg ved ikke hvor stort dit ark bliver - men et alternativ kan da være
at tælle fra toppen, så den første vare får id 1, den anden id 2 osv.
I sidste ende er det nødvendigt at der er en sammenhæng, og at den er
unik - ellers kan du ikke finde tilbage, eller finde den samme div
igen, om du vil.
Håber det er forståeligt ;>)
Jeg så lige lidt i din kode (tror noget af det kan gøres meget enklere)
at hver input har et id der svarer til varen. Måske kunne du bruge det,
til at generere id'et for den tilhørende bestillingsdiv.
Umiddelbart kan du blot tilføje det id til din addElement funktion
(både i kaldene i input og i definitionen), så kan du bruge det som id
for den nye div, med en eller anden tilføjelse ( '_bestil' f.eks).
function addElement( id) {
var ni = document.getElementById( 'cartDiv');
var numi = document.getElementById( 'productOrder');
if ( numi.innerHTML != 0) {
var num = (document.getElementById('productOrder').innerHTML -1 +
2);
numi.value = num;
var divIdName = id+'_bestil';
if ( b_elm = document.getElementById( divIdName)) {
b_elm.innerHTML = 'Nyt indhold til eksisterende div';
}
else {
var newdiv = document.createElement('div');
newdiv.setAttribute( 'id', divIdName);
newdiv.innerHTML = 'Indhold til ny div';
ni.appendChild(newdiv);
}
}
}
Men det er altså ikke nemt at overskue...
> Du har fuldt ud forstået hvad jeg mener, men jeg må desværre tilstå, at
> jeg åbenbart et for stor en noob til at fatte hvordan man skal
> implementere et check af de eksisterende elementer, i det nuværende
> script :S Har i den grad brug for et script-eksempel, for overhovedet at
> have en idé om hvordan en sådan funktion bør se ud.
Når du for en given vare, ved hvilket id bestillings-div'en skal have,
kan du bare checke på om det id eksiterer.
if ( elm = document.getElementById( 'den_div')) {
elm.innerHTML = 'ny tekst';
}
else {
//opret ny div her
}
som skal indsættes der hvor du opretter den nye div (Se forslag
ovenfor). Men du er nødt til at ændre på id'erne, så du ved hvad der
skal søges efter, først.
(Jeg skal gerne komme med forslag - men det kan ikke blive før sidst i
næste uge. Jeg er faktisk ved at pakke alting væk - flytter på søndag)
>> Grunden til at sletningen ikke virker, er at dit js indsætter
>> variabelnavnet i stedet for det faktiske id. Der står
>> onclick="remove( '+divIdName+');" i de indsatte elementer,
>> og det er ikke det du vil - og det giver i øvrigt en fejl.
>> onClick=\"remove('+divIdName+')\" skal så vidt jeg kan se, erstattes
>> med
>> onclick=\"remove( '"+divIdName+"');\"
>
> Hovsa :)
>
>> Og din slette rutine mangler at identificere elementet der skal
>> slettes - og den kan skrives lidt enklere som
>> d_elm = document.getElementById( did);
>> dId.parentNode.removeChild( dId);
>
> Okay, nice.. hvor i scriptet skal de to linier placeres?
function remove(dId) {
d_elm = document.getElementById( dId);
d_elm.parentNode.removeChild( d_elm);
}
>> Nogel kommenatrer :
>> Du skriver HTML5? - ellers mangler doctype.
>> validatoren brokker sig gevaldigt - specielt fordi js ikke er
>> afmaket - og jeg ved ikke hvad det rigtige er tilHTML5.
>> Din kode er ikke nem at finde rundt i - indrykninger, please
, og
>> så ville det hjælpe gevaldigt, hvis du oprettede klasser til CSS'en..
>>
>> -----
>>
>> Rune Jensen skrev:
>>
>> Indrykninger er hammer vigtige, specielt hvis man laver branches
>> (if... then...), men faktisk altid, også HTML. Jeg ser det hos alle -
>> både begyndere og øvede, at man ikke indrykker, og det gør det meget
>> svært at overskue ved større dokumenter.
>
> Øhm, jeg må tilstå at jeg aldrig har gjort mig klog på doctype :S Af
> samme årsag, ved jeg ikke om det er HTML5 eller noget andet jeg skriver
> i.
Hvad får dig så til at tro at browseren kan?
Indsæt
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"
http://www.w3.org/TR/html4/strict.dtd">
som den allerførste linie i dit dokument - og brug så validatorerne. De
er en stor hjælp. Specielt under udvikling, er det næsten nødvendigt at
koden validerer - eller at man i hvert fald kender og er klar over
betydningen af de fejl der måtte være.
Uden doctype er det enten HTML5 eller browserne er i quirks-mode. Du
kan ikke regne med hvad du ser, og det er formentlig ikke ens i
forskellige browsere.
Brug FF, og installer HTML-validator og FireBug. Den første fortæller
dig med det samme om valideringsfejl - den anden et uvurderligt værktøj
til mange ting - bl.a. debug af js.
> Yes, jeg er godt klar over at min kode er rodet og uoverskuelig og at
> klasser er noget jeg bør gøre væsentlig mere brug af. Dette er også bare
> test-delen af mit "lille" projekt, for at se om de ting jeg har i
> hovedet, rent faktisk kan lade sig gøre. I tilfældet af at alt kører som
> det skal, garanterer jeg jer for at der bliver rydtet gevaldigt op i
> koden :)
Det er vel helt almindeligt, at koden under udvikling, ikke ser så pæn
ud som den burde.
På den anden side, så er fordelene ved at holde koden pæn, netop at den
er til at finde rundt i. Jeg er temmelig sikker på, at den tid du
bruger på at rydde op, bliver tjent ind i tid sparet ved at skulle lede
efter tingene.
Fejlfinding og rettelser i organiseret kode, er væsentlig hurtigere end
først at skulle finde nålen i høstakken..
Og specielt når du beder om hjælp. At finde rundt i andres kode, selv
når den er vekorganiseret, kan tage sin tid. Når den som din ikke er
organiseret, tager det endnu længere.
Så det er lige så meget et godt råd, som en skideballe - det vil gavne
dig selv mest.
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk