Avatar billede elskermad.dk Nybegynder
15. april 2006 - 15:59 Der er 138 kommentarer og
1 løsning

Felter i flere "niveauer" via DOM-programmering

Hej Eksperter!

Jeg skal have lavet muligheden for at tilføje en ubestemt antal felter således man kan lave forskellige varianter med forskellige værdier (skal bruges til en webshop således man fx kan indskrive farve, størrelse, kvalitet og meget meget andet)

Jeg er selv gået i gang med det kniber en smule for mig på dette område!

I kan se hvad jeg er nået frem til på denne side:
www.elskermad.dk/test.htm

Som i kan se kan man godt tilføje varianter og også værdier til den første variant, men ikke til de varianter man tilføjer manuelt!

Håber der er nogen der kan få mit script til at fungere optimalt! (Det skal meget gerne laves således at man kan slette varianter og værdier "on-the-run" i scriptet via grafikstumperne...

På forhånd mange tak :D
Avatar billede mclemens Nybegynder
15. april 2006 - 17:03 #1
en lille start...



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

var actRow = 1;
   
function tilfoej(type,nr){
if(type == 'variant'){

  tabel = document.getElementById('variant');

  raekke = document.getElementById('variant_1').cloneNode(true);

  raekke.id = raekke.id.replace('_1','_' + (++actRow));
           
  inps = raekke.getElementsByTagName('input');
           
  for(i=0;inps.length>i;i++){
  inps[i].name = inps[i].name.replace('_1','_' + actRow);
  if(inps[i].type!='button')inps[i].value = '';
  }

  inps = raekke.getElementsByTagName('tr');
           
  for(i=0;inps.length>i;i++){
  inps[i].id = inps[i].id.replace('_1','_' + actRow);
  }

  inps = raekke.getElementsByTagName('tbody');
           
  for(i=0;inps.length>i;i++){
  inps[i].id = inps[i].id.replace('_1','_' + actRow);
  }

tabel.appendChild(raekke);
}


        else if (type == 'type') {
            nr            = nr.replace('variant_','');
            nr            = nr.replace('_link','');
           
            var tabel    = document.getElementById('model_' + nr);
            var raekke    = document.getElementById('model_1_1').cloneNode(true);
            raekke.id    = raekke.id.replace(/_1_/,'_' + nr + '_');
            inps        = raekke.getElementsByTagName('input');
           
            for(i=0;inps.length>i;i++){
                inps[i].name = inps[i].name.replace(/_1_/,'_' + nr + '_');
                inps[i].value = '';
            }
           
            tabel.appendChild(raekke);
        }
    }
</script></head>

<body>

<table align="center" cellpadding="0" cellspacing="0" width="100%">
    <tbody id="variant">
        <tr id="variant_1" align="left" valign="middle">
            <td>
                <input name="variant_1" style="width: 385px;" type="text"> <img src="test_files/delete.htm" alt="Fjern variant" onclick='if(confirm(\"Er du sikker på du vil fjerne denne variant?\"))alert(\"fjerner\")' border="0"><br>
                <table align="center" cellpadding="2" cellspacing="0" width="100%">
                    <tbody id="model_1">
                        <tr id="model_1_1" align="left" valign="middle">
                            <td width="20">&nbsp;</td>
                            <td><input name="variant_1_navn[]" style="width: 100%;" type="text"></td>
                            <td width="50"><input name="variant_1_pris[]" style="width: 100%; text-align: right;" type="text"></td>
                            <td width="50"><input name="variant_1_vaegt[]" style="width: 100%; text-align: right;" type="text"></td>
                            <td width="10"><img src="test_files/delete.htm" alt="Fjern type" border="0"></td>
                        </tr>
                    </tbody>
                </table>
                <input name="variant_1_link" value="Tilføj type" style="margin-left: 20px;" onclick='tilfoej("type",this.name)' type="button">
            </td>
        </tr>
    </tbody>
</table>
<a href="#" onclick='tilfoej("variant",1);return false'>Tilføj variant</a>

</body></html>
Avatar billede mclemens Nybegynder
15. april 2006 - 17:08 #2
næste punkt skal de nye varianter være tømt for typer fra start af?
- evt. bare med en tom type...
Avatar billede elskermad.dk Nybegynder
15. april 2006 - 17:16 #3
Der skal blot være én tom type ved oprettelse af ny variant - Har ikke lige testet det du har skrevet indtil, men kigger lige på det om en times tid!
Avatar billede mclemens Nybegynder
15. april 2006 - 17:21 #4
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

var actRow = 1;
   
function tilfoej(type,nr){
if(type == 'variant'){

  tabel = document.getElementById('variant');

  raekke = document.getElementById('variant_1').cloneNode(true);

  raekke.id = raekke.id.replace('_1','_' + (++actRow));
           
  inps = raekke.getElementsByTagName('input');
           
  for(i=0;inps.length>i;i++){
  inps[i].name = inps[i].name.replace('_1','_' + actRow);
  if(inps[i].type!='button')inps[i].value = '';
  }

  inps = raekke.getElementsByTagName('tr');
           
  for(i=0;inps.length>i;i++){
  inps[i].id = inps[i].id.replace('_1','_' + actRow);
  }

  inps = raekke.getElementsByTagName('tbody');
           
  for(i=0;inps.length>i;i++){
  inps[i].id = inps[i].id.replace('_1','_' + actRow);
  }

  inps = raekke.getElementsByTagName('tbody');
           
  for(i=0;inps.length>i;i++){
  if(inps[i].id=="model_"+actRow){
    while(inps[i].childNodes.length>1)inps[i].removeChild(inps[i].childNodes[0]);
  }
  }

tabel.appendChild(raekke);
}


        else if (type == 'type') {
            nr            = nr.replace('variant_','');
            nr            = nr.replace('_link','');
           
            var tabel    = document.getElementById('model_' + nr);
            var raekke    = document.getElementById('model_1_1').cloneNode(true);
            raekke.id    = raekke.id.replace(/_1_/,'_' + nr + '_');
            inps        = raekke.getElementsByTagName('input');
           
            for(i=0;inps.length>i;i++){
                inps[i].name = inps[i].name.replace(/_1_/,'_' + nr + '_');
                inps[i].value = '';
            }
           
            tabel.appendChild(raekke);
        }
    }
</script></head>

<body>

<table align="center" cellpadding="0" cellspacing="0" width="100%">
    <tbody id="variant">
        <tr id="variant_1" align="left" valign="middle">
            <td>
                <input name="variant_1" style="width: 385px;" type="text"> <img src="test_files/delete.htm" alt="Fjern variant" onclick='if(confirm(\"Er du sikker på du vil fjerne denne variant?\"))alert(\"fjerner\")' border="0"><br>
                <table align="center" cellpadding="2" cellspacing="0" width="100%">
                    <tbody id="model_1">
                        <tr id="model_1_1" align="left" valign="middle">
                            <td width="20">&nbsp;</td>
                            <td><input name="variant_1_navn[]" style="width: 100%;" type="text"></td>
                            <td width="50"><input name="variant_1_pris[]" style="width: 100%; text-align: right;" type="text"></td>
                            <td width="50"><input name="variant_1_vaegt[]" style="width: 100%; text-align: right;" type="text"></td>
                            <td width="10"><img src="test_files/delete.htm" alt="Fjern type" border="0"></td>
                        </tr>
                    </tbody>
                </table>
                <input name="variant_1_link" value="Tilføj type" style="margin-left: 20px;" onclick='tilfoej("type",this.name)' type="button">
            </td>
        </tr>
    </tbody>
</table>
<a href="#" onclick='tilfoej("variant",1);return false'>Tilføj variant</a>

</body></html>
Avatar billede mclemens Nybegynder
15. april 2006 - 17:25 #5
hov, den behøver da ikke løbe gennem tbody 2 gange :P

  inps = raekke.getElementsByTagName('tbody');
         
  for(i=0;inps.length>i;i++){
  inps[i].id = inps[i].id.replace('_1','_' + actRow);
  }

  inps = raekke.getElementsByTagName('tbody');
         
  for(i=0;inps.length>i;i++){
  if(inps[i].id=="model_"+actRow){
    while(inps[i].childNodes.length>1)inps[i].removeChild(inps[i].childNodes[0]);
  }
  }


skiftes til:


  inps = raekke.getElementsByTagName('tbody');
           
  for(i=0;inps.length>i;i++){
  inps[i].id = inps[i].id.replace('_1','_' + actRow);

  if(inps[i].id=="model_"+actRow){
    while(inps[i].childNodes.length>1)inps[i].removeChild(inps[i].childNodes[0]);
  }
  }
Avatar billede elskermad.dk Nybegynder
15. april 2006 - 17:27 #6
Det ser ud til det virker perfekt :D Nu er det blot delen med at slette enkelte specifikke felter der skal til?
Avatar billede mclemens Nybegynder
15. april 2006 - 17:30 #7
det er ikke helt så effektivt igen... der burde vel egentlig oprettes en ny tabel istedet for at manipulere ved en ... men jeg er lidt doven idag så vi kører bare videre på den - det er jo browserens resourcer og ikke serverens :P
kigger lige på sletning :P
Avatar billede mclemens Nybegynder
15. april 2006 - 17:44 #8
lidt mere... (det var variant så mangler vi lige typer)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

var actRow = 1;
   
function tilfoej(type,nr){
if(type == 'variant'){

  tabel = document.getElementById('variant');

  raekke = document.getElementById('variant_1').cloneNode(true);

  raekke.id = raekke.id.replace('_1','_' + (++actRow));
           
  inps = raekke.getElementsByTagName('input');
           
  for(i=0;inps.length>i;i++){
  inps[i].name = inps[i].name.replace('_1','_' + actRow);
  if(inps[i].type!='button')inps[i].value = '';
  }

  inps = raekke.getElementsByTagName('tr');
           
  for(i=0;inps.length>i;i++){
  inps[i].id = inps[i].id.replace('_1','_' + actRow);
  }

  inps = raekke.getElementsByTagName('tbody');
           
  for(i=0;inps.length>i;i++){
  inps[i].id = inps[i].id.replace('_1','_' + actRow);

  if(inps[i].id=="model_"+actRow){
    while(inps[i].childNodes.length>1)inps[i].removeChild(inps[i].childNodes[0]);
  }
  }

  inps = raekke.getElementsByTagName('img');
           
  for(i=0;inps.length>i;i++){
  inps[i].id = inps[i].id.replace('_1','_' + actRow);
  }

tabel.appendChild(raekke);
}


        else if (type == 'type') {
            nr            = nr.replace('variant_','');
            nr            = nr.replace('_link','');
           
            var tabel    = document.getElementById('model_' + nr);
            var raekke    = document.getElementById('model_1_1').cloneNode(true);
            raekke.id    = raekke.id.replace(/_1_/,'_' + nr + '_');
            inps        = raekke.getElementsByTagName('input');
           
            for(i=0;inps.length>i;i++){
                inps[i].name = inps[i].name.replace(/_1_/,'_' + nr + '_');
                inps[i].value = '';
            }
           
            tabel.appendChild(raekke);
        }
    }

function removevariant(tmpid){
if(confirm("Er du sikker på du vil fjerne denne variant?")){
  alert("Fjerner");
  rem=document.getElementById(tmpid.replace("img_",""));
  par=document.getElementById("variant");
  par.removeChild(rem);
}
}
</script></head>

<body>

<table align="center" cellpadding="0" cellspacing="0" width="100%">
    <tbody id="variant">
        <tr id="variant_1" align="left" valign="middle">
            <td>
                <input name="variant_1" style="width: 385px;" type="text"> <img src="test_files/delete.htm" alt="Fjern variant" id="img_variant_1" onclick='removevariant(this.id);' border="0"><br>
                <table align="center" cellpadding="2" cellspacing="0" width="100%">
                    <tbody id="model_1">
                        <tr id="model_1_1" align="left" valign="middle">
                            <td width="20">&nbsp;</td>
                            <td><input name="variant_1_navn[]" style="width: 100%;" type="text"></td>
                            <td width="50"><input name="variant_1_pris[]" style="width: 100%; text-align: right;" type="text"></td>
                            <td width="50"><input name="variant_1_vaegt[]" style="width: 100%; text-align: right;" type="text"></td>
                            <td width="10"><img src="test_files/delete.htm" alt="Fjern type" border="0"></td>
                        </tr>
                    </tbody>
                </table>
                <input name="variant_1_link" value="Tilføj type" style="margin-left: 20px;" onclick='tilfoej("type",this.name)' type="button">
            </td>
        </tr>
    </tbody>
</table>




<a href="#" onclick='tilfoej("variant");return false'>Tilføj variant</a>

</body></html>
Avatar billede mclemens Nybegynder
15. april 2006 - 18:13 #9
noget i denne stil :P


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

var actRow = 1;
   
function tilfoej(type,nr){
if(type == 'variant'){

  tabel = document.getElementById('variant');

  raekke = document.getElementById('variant_1').cloneNode(true);

  raekke.id = raekke.id.replace('_1','_' + (++actRow));
           
  inps = raekke.getElementsByTagName('input');
           
  for(i=0;inps.length>i;i++){
  inps[i].name = inps[i].name.replace('_1','_' + actRow);
  if(inps[i].type!='button')inps[i].value = '';
  }

  inps = raekke.getElementsByTagName('tr');
           
  for(i=0;inps.length>i;i++){
  inps[i].id = inps[i].id.replace('_1','_' + actRow);
  }

  inps = raekke.getElementsByTagName('tbody');
           
  for(i=0;inps.length>i;i++){
  inps[i].id = inps[i].id.replace('_1','_' + actRow);

  if(inps[i].id=="model_"+actRow){
    while(inps[i].childNodes.length>1)inps[i].removeChild(inps[i].childNodes[1]);
  }
  }

  inps = raekke.getElementsByTagName('img');
           
  for(i=0;inps.length>i;i++){
  inps[i].id = inps[i].id.replace('_1','_' + actRow);
  inps[i].name = inps[i].name.replace('_1','_' + actRow);
  }

tabel.appendChild(raekke);
}


        else if (type == 'type') {
            nr            = nr.replace('variant_','');
            nr            = nr.replace('_link','');
           
            var tabel    = document.getElementById('model_' + nr);
            var raekke    = document.getElementById('model_1_1-').cloneNode(true);
            raekke.id    = raekke.id.replace(/_1_/,'_' + nr + '_');
            raekke.id    = raekke.id.replace('1-',tabel.childNodes.length+1 + '-');
            inps        = raekke.getElementsByTagName('input');
           
            for(i=0;inps.length>i;i++){
                inps[i].name = inps[i].name.replace(/_1_/,'_' + nr + '_');
                inps[i].value = '';
            }
            inps        = raekke.getElementsByTagName('img');
            for(i=0;inps.length>i;i++){
                inps[i].id = inps[i].id.replace(/_1/,'_' + +nr);
                inps[i].id = inps[i].id.replace(/_1-/,'_' + (+tabel.childNodes.length+1)+'-');
                inps[i].name = inps[i].name.replace(/_1/,'_' + nr);
            }           

           
            tabel.appendChild(raekke);
        }
    }

function removevariant(tmpid){
if(confirm("Er du sikker på du vil fjerne denne variant?")){
  alert("Fjerner");
  rem=document.getElementById(tmpid.replace("img_",""));
  par=document.getElementById("variant");
  par.removeChild(rem);
}
}

function removetype(tmpid,tmpid2){
alert(tmpid);
alert(tmpid2);
if(confirm("Er du sikker på du vil fjerne denne type?")){
  alert("Fjerner");
  rem=document.getElementById(tmpid.replace("img_",""));
  par=document.getElementById(tmpid2.replace("img_",""));
  par.removeChild(rem);
}
}
</script></head>

<body>

<table align="center" cellpadding="0" cellspacing="0" width="100%">
    <tbody id="variant">
        <tr id="variant_1" align="left" valign="middle">
            <td>
                <input name="variant_1" style="width: 385px;" type="text"> <img src="test_files/delete.htm" alt="Fjern variant" id="img_variant_1" onclick='removevariant(this.id);' border="0"><br>
                <table align="center" cellpadding="2" cellspacing="0" width="100%">
                    <tbody id="model_1" onclick="alert(this.id);">
                        <tr id="model_1_1-" align="left" valign="middle">
                            <td width="20">&nbsp;</td>
                            <td><input name="variant_1_navn[]" style="width: 100%;" type="text"></td>
                            <td width="50"><input name="variant_1_pris[]" style="width: 100%; text-align: right;" type="text"></td>
                            <td width="50"><input name="variant_1_vaegt[]" style="width: 100%; text-align: right;" type="text"></td>
                            <td width="10"><img id="img_model_1_1-" name="img_model_1" src="test_files/delete.htm" onclick='removetype(this.id,this.name);' alt="Fjern type" border="0"></td>
                        </tr>
                    </tbody>
                </table>
                <input name="variant_1_link" value="Tilføj type" style="margin-left: 20px;" onclick='tilfoej("type",this.name)' type="button">
            </td>
        </tr>
    </tbody>
</table>




<a href="#" onclick='tilfoej("variant");return false'>Tilføj variant</a>

</body></html>
Avatar billede mclemens Nybegynder
15. april 2006 - 18:15 #10
hov:
                    <tbody id="model_1" onclick="alert(this.id);">
->
                    <tbody id="model_1">
Avatar billede elskermad.dk Nybegynder
15. april 2006 - 18:17 #11
He he ja, lad os bare browseren lide for "vores" dovenskab :)

Ser rigtigt godt ud indtil videre... Hvis en sletning af type kunne komme på ville det jo være kanont!
Avatar billede mclemens Nybegynder
15. april 2006 - 18:18 #12
slet løs :)
Avatar billede elskermad.dk Nybegynder
15. april 2006 - 18:20 #13
Jeg fik ikke lige opdateret inden jeg trykkede af... Tester lige!
Avatar billede mclemens Nybegynder
15. april 2006 - 18:20 #14
hehe
Avatar billede elskermad.dk Nybegynder
15. april 2006 - 18:25 #15
1) Jeg skal submitte felterne over i noget dynamisk php, men eftersom det ikke ligger sig i et array hvordan tilgår jeg dem bedst? Jeg kan jo ikke være sikker på at jeg kan tilgå dem efter nummeret da fx variant_2 kan være slettet selvom variant_3 findes - Kunne man lave en sumup-felt som indeholdt antallet af varianter?

2) Hvis man sletter variant_1 kikser resten af scriptet - Kunne man evt. lave en variant_0 som var skjult og som blot skulle fungere som "skabelon" for resten af felterne?

3) Somme problem som punkt 2: Hvis man sletter model_1_1-rækken kokser resten af tilføjelserne - Hvordan kan det problem løses?

4) Burde scriptet virke i alle browsere eller er det en IE-ting?

(Kan være der kommer mere)
Avatar billede elskermad.dk Nybegynder
15. april 2006 - 18:28 #16
Kiggede lige i FF - Der bliver der ikke automatisk tilføjet et type-felt under varianten når man tilføjer en ny
Avatar billede mclemens Nybegynder
15. april 2006 - 18:33 #17
1: Joh, et array vil være sagen ... men vi bør nok kigge lidt dybere i koden m.h.t. id og name på de forskellige varianter og typer så vi ikke får konflikter ved sletninger og tildelinger.

2: [Hvis man sletter variant_1 kikser resten af scriptet - Kunne man evt. lave en variant_0 som var skjult] - ikke ideelt... fylder ... [ og som blot skulle fungere som "skabelon" for resten af felterne? ] - en skabelon inkluderet i scriptet istedet med variant count up og array's dertil med type count up må være vejen istedet...

3: ^ Samme som ovenstående som jeg nævnte i http://www.eksperten.dk/spm/702912#rid6209019 er det ikke optimalt med et script der baserer sig på indhold der kan slettet... ulemper: det gør hurtigt scriptet langt, indviklet og en smule uhåndterligt...

4: checker lige op på den (anden pc. med ie, ff, opera, netscape og vender tilbage senere...

[ (Kan være der kommer mere) ] ... skal lige have en puster samt en pepsi og en pose chips frem nu :P
Avatar billede mclemens Nybegynder
15. april 2006 - 18:34 #18
[ Kiggede lige i FF - Der bliver der ikke automatisk tilføjet et type-felt under varianten når man tilføjer en ny ] - ok, men vi skal have scriptet omkodet så det kigger vi på senere...
Avatar billede mclemens Nybegynder
15. april 2006 - 18:37 #19
lige en ting... ville det være helt skidt, hvis det var divs?
Avatar billede elskermad.dk Nybegynder
15. april 2006 - 18:48 #20
Jeg er skam helt ligeglad med hvordan det er bygget op - Kendte blot kun denne metode via noget hjælp jeg fik fra roenving herinde engang - Jeg er blot alt den hjælp du vil give mig taknemmelig :) Du er fået lidt karmatildeling som første afdrag på din store hjælp - pointene er selvfølgelig også dine når vi bliver færdige :)

Men hvis du har tiden og lysten til det, må du meget gerne eksperimentere med andre metoder hvis de er bedre og hurtigere!
Avatar billede mclemens Nybegynder
15. april 2006 - 18:48 #21
kigger på tables... det er bare et lille stykke tid siden...
så hvis jeg laver noget forkert med tabellerne, siger du lige til...
Avatar billede mclemens Nybegynder
15. april 2006 - 18:48 #22
hov update
Avatar billede mclemens Nybegynder
15. april 2006 - 18:49 #23
laver det i div's og css så - der er jeg mere hjemme... :)
Avatar billede mclemens Nybegynder
15. april 2006 - 18:50 #24
- der går nogle timer, før der kommer noget tror jeg ... (7-9-13),
så du må godt tage en pause, mens jeg leger lidt ... og tak for karma :)
Avatar billede mclemens Nybegynder
15. april 2006 - 19:03 #25
lige en lille ting grunden til problemet med ff før var åbenbart at mellemrum kan ske at blive talt talt som childnodes mens ie ser bort fra dette... spørg mig ikke hvorfor...
Avatar billede elskermad.dk Nybegynder
15. april 2006 - 19:06 #26
okay har ingen idé om hvordan det fungerer med divs, men vil stadig gå ud fra det er via noget DOM-programmering så det foregår i browseren uden refresh osv...?

Jeg kigger ind løbende og ser hvad der sker... c¨,)
Avatar billede mclemens Nybegynder
15. april 2006 - 19:17 #27
hehe, du er nysgerrig...
<div> / <table> det er det samme (næsten) forskellen ligger mere i, at hvis jeg skal lave det med tables, skal jeg hver gang jeg med dom skulle lave denne linje (så vidt jeg ved... har jo lige lært javascript :/ ):

mcfapp0=document.createElement("div");
mcfapp1=document.createTextNode("En test");
mcfapp0=mcfapp0.appendChild(mcfapp1);
document.getElementById("mcfcont").appendChild(mcfapp0);

skulle der laves noget i denne stil (ikke tables hver gang men der skulle
noget tr og td med hver gang selvom tbody og table ikke skulle med... et lidt voldsomt eksempel (ingen er testet - men mere til illustrering)

mcfapp0=document.createElement("table");
mcfapp1=document.createTextNode("tbody");
mcfapp2=document.createTextNode("tr");
mcfapp3=document.createTextNode("td");
mcfapp4=document.createTextNode("En test");
mcfapp3=mcfapp3.appendChild(mcfapp4);
mcfapp2=mcfapp2.appendChild(mcfapp3);
mcfapp1=mcfapp1.appendChild(mcfapp2);
mcfapp0=mcfapp0.appendChild(mcfapp1);
document.getElementById("mcfcont").appendChild(mcfapp0);
Avatar billede mclemens Nybegynder
15. april 2006 - 19:18 #28
ups: hver gang jeg med dom skulle lave denne linje ...
-> hver gang jeg med dom skulle lave disse 3 linjer ...
Avatar billede mclemens Nybegynder
15. april 2006 - 19:18 #29
hehe 4 linjer :P
Avatar billede mclemens Nybegynder
15. april 2006 - 19:36 #30
xhtml eller html ?
Avatar billede mclemens Nybegynder
15. april 2006 - 19:44 #31
html - efter at jeg har tjekket dit site
Avatar billede elskermad.dk Nybegynder
15. april 2006 - 19:50 #32
ja almindelig html :) (det er godt nok ikke til alvision.dk men mit gratis webshop system jeg er ved at opdatere på (: )
Avatar billede mclemens Nybegynder
15. april 2006 - 19:56 #33
Jeps, sådan et system har jeg også lavet den er bare closed source
med syv segl 8) ... kun til eget brug og optimeret hertil :)
Avatar billede mclemens Nybegynder
15. april 2006 - 20:01 #34
hehe, var lige ved at lave en brøler... så man kun kunne have scriptets resultat på siden... fik dog lige den rettet inden jeg gik videre ... :D
Avatar billede elskermad.dk Nybegynder
15. april 2006 - 20:20 #35
hehe den er nu god nok: www.alvision.dk/webshop.htm

er det muligt man kan følge med, eller "leger" du kun "derhjemme" (lokalt)?
Avatar billede mclemens Nybegynder
15. april 2006 - 20:35 #36
Leger p.t. kun lokalt da jeg ikke "sidder" på en server... loader lidt op lidt senere grundstenen (layout) skal lige være lidt færdig først... her er et oplæg men det siger ikke meget uden css er sat op... mcfvhold er her holderen til varianterne og så videre... men det tager lige lidt tid ...

<div class="mcfcont">

<div id="mcfvhold">

  <div id="mcfv1" class="mcfvar">

  <div id="mcfv1m" class="mcfminn">

    <div id="mcfv1m1" class="mcfmtype>

    <input type="text" name="variant1navn[]">

    <input type="text" name="variant1pris[]">

    <input type="text" name="variant1vaegt[]">

    <img src="delete.jpg" onclick="removetype('1m1');" alt="Fjern type">

    </div>

  </div>

  <div class="mcfvbox">
    <input value="Tilføj type" onclick="mcftypeadd(1)" type="button">
    <img src="test_files/delete.htm" onclick="removevariant(1);" alt="Fjern variant">
  </div>

  </div>

</div>

</div>
Avatar billede mclemens Nybegynder
15. april 2006 - 20:36 #37
og det skal så integreres her... og det er jeg igang med ... tom side p.t. så den er ikke så sjov endnu :/

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type"

content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<link rel="stylesheet" type="text/css" href="css.css">

<script type="text/javascript">

mcf0="";
/* Scriptet startes og vi laver en forbindelse til stedet indholdet skal indsættes */
window.onload=function(){
mcfaddvariant('reset');
mcf0=document.getElementById("mcfvhold");
}

mcfvars = new Array();

/* Script til tilføjelse af start holder til variantnoder samt flere variantnode */
function mcfaddvariant(ctrl){
mcftnh = new Array(); // Holder til konstruktionsnoder

mcf3a=document.createElement("div");
mcf3a.setAttribute("class","mcfvar");mcf3a.setAttribute("id","mcfv"+(+mcfvars.length+1));




mcf3b=document.createElement("div");
mcf3b.setAttribute("class","mcfvbox");

mcf0.appendChild(mcf3a);

/* Fjerner alle noder i et element med id="mcfappplc" hvis der foretages reset (opstart) */
if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]);
}

</script></head>

<body onclick="alert(document.body.innerHTML);">

<div class="mcfcont">
<div id="mcfvhold">

<div

style="position:absolute;top:50%;left:50%;width:300px;text-align:center;height:45px;margin: -30px

0px 0px -155px;border:1px solid black;padding:5px;">Javascript kræves for at bruge denne

komponent.<br>- Aktiver Javascript i din browser og prøv igen -</div>

</div>
</div>

</body></html>
Avatar billede mclemens Nybegynder
15. april 2006 - 20:37 #38
jep og den blev ombrudt :P

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<link rel="stylesheet" type="text/css" href="css.css">

<script type="text/javascript">

mcf0="";
/* Scriptet startes og vi laver en forbindelse til stedet indholdet skal indsættes */
window.onload=function(){
mcfaddvariant('reset');
mcf0=document.getElementById("mcfvhold");
}

mcfvars = new Array();

/* Script til tilføjelse af start holder til variantnoder samt flere variantnode */
function mcfaddvariant(ctrl){
mcftnh = new Array(); // Holder til konstruktionsnoder

mcf3a=document.createElement("div");
mcf3a.setAttribute("class","mcfvar");mcf3a.setAttribute("id","mcfv"+(+mcfvars.length+1));




mcf3b=document.createElement("div");
mcf3b.setAttribute("class","mcfvbox");

mcf0.appendChild(mcf3a);

/* Fjerner alle noder i et element med id="mcfappplc" hvis der foretages reset (opstart) */
if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]);
}

</script></head>

<body onclick="alert(document.body.innerHTML);">

<div class="mcfcont">
<div id="mcfvhold">

<div style="position:absolute;top:50%;left:50%;width:300px;text-align:center;height:45px;margin: -30px 0px 0px -155px;border:1px solid black;padding:5px;">Javascript kræves for at bruge denne komponent.<br>- Aktiver Javascript i din browser og prøv igen -</div>

</div>
</div>

</body></html>
Avatar billede mclemens Nybegynder
15. april 2006 - 20:37 #39
ikke helt tom hvis du deaktiverer javascript...
Avatar billede elskermad.dk Nybegynder
15. april 2006 - 20:47 #40
Den melder fejl selvom jeg smider det op på serveren: elskermad.dk/test.htm - Men den var heller ikke færdig?
Avatar billede mclemens Nybegynder
15. april 2006 - 20:49 #41
nej, du spurgte på status ... den der ikke blev ombrudt burde dog ikke give fejlen... men er ved at køre videre på den ...
Avatar billede mclemens Nybegynder
15. april 2006 - 21:01 #42
hov, kan godt se at den giver fejl...
Avatar billede mclemens Nybegynder
15. april 2006 - 21:06 #43
det var bedre... går videre med den anden :P

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<link rel="stylesheet" type="text/css" href="css.css">

<script type="text/javascript">

/* Scriptet startes */
window.onload=function(){
mcfaddvariant('reset');
}

mcfvars = new Array();

/* Script til tilføjelse af start holder til variantnoder samt flere variantnode */
function mcfaddvariant(ctrl){

mcf0=document.getElementById("mcfvhold");

mcftnh = new Array(); // Holder til konstruktionsnoder

mcf3a=document.createElement("div");
mcf3a.setAttribute("class","mcfvar");mcf3a.setAttribute("id","mcfv"+(+mcfvars.length+1));




mcf3b=document.createElement("div");
mcf3b.setAttribute("class","mcfvbox");

mcf0.appendChild(mcf3a);

/* Fjerner alle noder i et element med id="mcfappplc" hvis der foretages reset (opstart) */
if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]);
}

</script></head>

<body onclick="alert(document.body.innerHTML);">

<div class="mcfcont">
<div id="mcfvhold">

<div style="position:absolute;top:50%;left:50%;width:300px;text-align:center;height:45px;margin: -30px 0px 0px -155px;border:1px solid black;padding:5px;">Javascript kræves for at bruge denne komponent.<br>- Aktiver Javascript i din browser og prøv igen -</div>

</div>
</div>

</body></html>
Avatar billede mclemens Nybegynder
15. april 2006 - 21:28 #44
Det var start formularen så skal kontrol array's, tilføjelse, fjernelse af typer og det samme for varianter indbygges sammen med nogle inputs der tæller sammen... og lidt design på det bare html :P ...
her er lidt arbejde til dig (mellemrum)...w w w.d k i f.c o m/users/mclemens/js/dom/tmp/tmp.html - jeg poster løsningen herinde til sidst da løsningen skal være på eksperten.dk ... men du kan jo se lidt midlertidig fremskridt istedet for at jeg spammer tråden... (adressen opdateres ikke løbende)
Avatar billede mclemens Nybegynder
15. april 2006 - 21:59 #45
kommer ikke rigtig mere i aften :P
Avatar billede elskermad.dk Nybegynder
15. april 2006 - 22:05 #46
Jeg kan ikke helt se hvad du har lavet på linket, men hvornår regner du så med at arbejde videre med det? :)
Avatar billede mclemens Nybegynder
15. april 2006 - 22:11 #47
imorgen... - (nej ærlig: arbejder lidt mere på den i aften)... men ville ikke sætte dig store forventninger i sigte lige idag... ;)
Avatar billede mclemens Nybegynder
16. april 2006 - 10:53 #48
Den er jo ikke færdig endnu, men p.t. er IE, FF, Opera, Netscape alle med.
Avatar billede mclemens Nybegynder
16. april 2006 - 13:43 #49
... kigger nok først på array kombinering og input kombinering i aften...
- et par spørsmål hertil:
1. Skal det være muligt at submitte med 1 tom variant værdi ?
2. Skal det være muligt at submitte med 1 tom type værdi under 1 variant ?
3. Skal der være et maksimum på antal af varianter ?
4. Skal der være et maksimum på antal af inputs pr. variant ?
5. Er der nogle tegn der ikke må forkomme i input felterne?
6. Hvad skal den streng der modtages adskilles med pr. værdi f.eks ";" , "," , "[,]" og så videre... det tegn/tegnkombination der vælges vil blive deaktiveret som samlet input så man ikke kan indtaste det så array'et går i stykker?

... Ved ikke om jeg kan alt det her (ikke så prof. som roenving og olebole m.fl.), men jeg prøver da om vi ikke lige kan få det sidste på plads ...
Avatar billede elskermad.dk Nybegynder
16. april 2006 - 18:23 #50
1. Ja det må gerne være muligt, men det tomme felt skal blot ikke behandles på serversiden

2. Ja - Strengen skal så blot være tom (evt. null)

3 + 4. Nej

5. Tjae, det er da sikkert, men lige pt. har jeg ikke skrevet denne del endnu, men hvis den blot kun acceptere standard tegn (såsom bogstaver +æøå i store så vel små udgaver, tal, mellemrum, punktum, kolon, og -+_/) så burde det være fint - Jeg kan vel altid selv tilpasse det senere i en reg.exp.?

6. Varianter kunne adskilles med ; og typer inden for hver variant kunne adskilles med komma!?

Det er hvert fald helt kanon det du kan indtil :)
Avatar billede mclemens Nybegynder
16. april 2006 - 19:01 #51
ok, går lidt videre nu :)

1-4, ok
5, det burde der ikke være noget i vejen for...

6, ok jeg adskiller med [;] og [,] - bemærk med klammerne også for ellers kan folk ikke sætte komma i en beskrivelse uden at det driller dig serverside... regner med at putte det hele ind i en lang streng f.eks.:
Sko[,]blå[,]pris[,]vægt[,]røde[,]pris[,]vægt[,]grønne[,]pris[,]vægt[;]hat[,]blå[,]pris[,]vægt[,]røde[,]pris[,]vægt[,]grønne[,]pris[,]vægt

^ herefter kan du splitte strengen serverside ... ved ikke om der er en begrænsning for hvor lang en streng man kan poste eller hvor meget man kan poste pr. gang???

... alternativt kunne det hele puttes i en cookie ved onsubmit i samme format som ovenstående og den cookie kunne så requestes serverside - men kigger på at lave de arrays først...
Avatar billede elskermad.dk Nybegynder
16. april 2006 - 19:53 #52
tror helt sikkert ikke der kan blive noget problem i længden af en streg - man kan jo fx poste filer på flere mb så hvorfor ikke streng som nok max bliver 100 kb (max max)

Glæder mig til at se det endelige resultat :)
Avatar billede mclemens Nybegynder
16. april 2006 - 22:58 #53
... skal det gøre betinget så hvis alle tre felter i en type ikke er udfyldt så ryger den ikke med ned til id'en? (p.t. er det kun betinget at varianten skal have et navn og at typen skal have et navn... og ikke pris samt vægt...)
Avatar billede elskermad.dk Nybegynder
16. april 2006 - 23:14 #54
pris og vægt skal ikke være betinget for at typen skal medtages (dog skal de ikke kunne udfyldes uden typens navn (: )
Avatar billede elskermad.dk Nybegynder
16. april 2006 - 23:19 #55
En temmelig væsenlig ting:

Pris-feltet må være i formatet (+|-)?[0-9]+(\.[0-9]{2})? (går ud fra du kan læse min reg.exp)

Vægt må være (+|-)?[0-9]+
Avatar billede mclemens Nybegynder
16. april 2006 - 23:24 #56
ok, kigger videre senere... :P
Avatar billede roenving Novice
17. april 2006 - 07:48 #57
-- og de regExps kan skrives nemmere:

[+-]?\d+(\.\d{2})?

[+-]?\d+
Avatar billede mclemens Nybegynder
17. april 2006 - 09:51 #58
forkorter lige... skal selvfølgelig også siges at selve skabelon samt validerings kontrol, append og remove funktion m.v. også kan laves kortere/evt. kombineres i et script... men det må lige blive en anden dag :D
Avatar billede mclemens Nybegynder
17. april 2006 - 13:27 #59
elsermad.dk ?
- hvad mere?
Avatar billede elskermad.dk Nybegynder
17. april 2006 - 13:56 #60
Har lige testet lidt:

1. Hvis man angiver en variantnavn, en typenavn og så skriver i prisfeltet så fejler den hvis man skriver ugyldige tegn. (samme med vægtfeltet hvis man udfylder prisfeltet korrekt) (fejlen er: linie 259 - regsearch.0 er null eller ikke et object

2. Hvis man blot angiver en variantnavn og ikke noget under typerne kommer den stadig med i resultatstregen (så burde den melde en fejl om at der ikke er angivet nogle typer under varianten)

3. Man kan skrive [,] og [;] i navnefelterne hvilket vel vil give en syntaxfejl i resultatstrengen?

4. Ved refresh af siden (F5) bliver resultatstregen i tekstboksen?

5. Hvis man sletter typen under en variant således den ingen typer har angivet melder den en js-fejl. (lidt som punkt 2)

Lige hvad jeg faldt over ved lidt legning med scriptet :)
Avatar billede mclemens Nybegynder
17. april 2006 - 14:10 #61
1, rettet

2... ok kigger på den (så der skal være en type med navn før de kommer med)

3. udelukker de tagn kombinationer (godt du er vågen)

4. undersøger det - og kigger på løsning

5. ok, gør det betinget at varianter skal have en type før de kommer med...

[ Lige hvad jeg faldt over ved lidt legning med scriptet :) ]
- lækkert nok :)
Avatar billede mclemens Nybegynder
17. april 2006 - 14:11 #62
tagn kombinationer (godt du er vågen) -> tegn ... + for det jeg ikke helt
Avatar billede elskermad.dk Nybegynder
17. april 2006 - 14:17 #63
hehe det er skam bare helt i orden :P må tilstå at det du har lavet indtil er langt ud over min vildeste fantasi for hvormeget hjælp man kan få herinde på exp.dk :)

kigger lige scriptet igennem igen når du melder tilbage at det er klar til det
Avatar billede mclemens Nybegynder
17. april 2006 - 19:30 #64
... sådan?

[ hehe det er skam bare helt i orden :P må tilstå at det du har lavet indtil er langt ud over min vildeste fantasi for hvormeget hjælp man kan få herinde på exp.dk :) ]
- tjah, det er måske også meget for 200 point... men kunne godt lige bruge lidt træning i jsdom så det var jo en udfordring :P - koden er dog lidt fyldig, men det bør så også gøre det lettere at tilrette i den senere...

- der er fri design i div'en med id mcfcont2 dog skal formularen have samme navnet submclfvt ellers skal det rettes i scriptet også - det samme gælder for <input type="text" name="addobjects" id="mcalcarr">...

- der er også fri design i div'en med id="mcftools" den eneste der ikke lige er "fri" design i umiddelbart er div'en med id="mcfvhold"... dog er der jo rig mulighed for css styling...

- der er selvfølgelig frit design i det hele, men det i div'en med id="mcfvhold" kan kræve tilretning i dom append skabelonen med nogle flere/andre classes, flere attributter eller anden rækkefølge...

- det hele kan du selvfølgelig også pakke ind i ydre div's eller
en td i en tabel uden at det giver dig problmer :)
Avatar billede mclemens Nybegynder
17. april 2006 - 19:31 #65
have samme navnet -> have navnet ,
Avatar billede mclemens Nybegynder
17. april 2006 - 19:44 #66
p.s. skal lige have slettet den dumme alert der kommer op når det er valid indhold man submitter... det er kun en test alert så du kan se indholdet der bliver postet...
Avatar billede mclemens Nybegynder
17. april 2006 - 19:52 #67
15/04-2006 18:33:19
[4: checker lige op på den (anden pc. med ie, ff, opera, netscape og vender tilbage senere...]
- Nåh, det var vist på tide :P virker i FF, IE, Opera, Netscape... lille bug fundet hvis man kopierer [,] og/eller [;] ind uden at bruge tastaturet (mus eller menupanel) så fjerner den ikke variablerne... kigger lige på en rettelse på det punkt
Avatar billede mclemens Nybegynder
17. april 2006 - 19:58 #68
og en lille fejl med manglende validering af [,] og [;] i variant navnet...
Avatar billede mclemens Nybegynder
17. april 2006 - 20:11 #69
sådan :)
Avatar billede elskermad.dk Nybegynder
18. april 2006 - 21:09 #70
Det ser ud til at virke perfekt! Kom med det velfortjente svar :)

Hvorlænge lader du det ligge på serveren? (ville være en skam hvis det forsvandt inden jeg fik det tilpasset mit system og jeg så ikke kan hente det forfra)

Du skal virkelig have mange tak for din hjælp, havde aldrig fået lavet det så godt selv, og ja selvom du selvfølgelig kunne forøge dine kompetencer inden for DOM-programmeringen så er det meget arbejde du har lagt i det, som du skal have rigtig mange tak for - igen :D
Avatar billede mclemens Nybegynder
18. april 2006 - 21:17 #71
[ Det ser ud til at virke perfekt! Kom med det velfortjente svar :) ]
- Ok, her kommer det :)

[ Hvorlænge lader du det ligge på serveren? (ville være en skam hvis det forsvandt inden jeg fik det tilpasset mit system og jeg så ikke kan hente det forfra) ]
Jeg sletter dem nok om et par dage...
- men om kort tid poster jeg begge filer herinde... det skal man jo iflg. ekspertens regler ... så du vil jo altid kunne finde dem i denne tråd ... ;)

[ Du skal virkelig have mange tak for din hjælp, havde aldrig fået lavet det så godt selv, og ja selvom du selvfølgelig kunne forøge dine kompetencer inden for DOM-programmeringen så er det meget arbejde du har lagt i det, som du skal have rigtig mange tak for - igen :D ]
- Det var så lidt ;)
Avatar billede mclemens Nybegynder
18. april 2006 - 21:19 #72
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<style type="text/css">
html, body{margin:0px;padding:0px;}

.mcfcont{width:750px;margin:10px auto 0px auto;height:100%;}
.mcfcont2{width:750px;margin:0px auto;position:relative;display:none;}

.mcfvar{padding:5px 0px;}

.mcfspc0{height:0px;font-size:0px;line-height:0px;}
.mcfspc{height:5px;font-size:1px;clear:both;}
.mcfspc2{height:20px;font-size:1px;}

#mcalcarr, #mcftools, #mcftoolspc{display:none;}

.mcfvn, .mcfvp, .mcfvv{height:21px;padding:0px;margin-right:7px;float:left;font-size:18px;}

.mcfvn{width:500px;}

.mcfvp{width:125px;}

.mcfvv{width:65px;}

.mcfaddtype{float:left;height:25px;width:125px;}

.mcfvi{float:right;}

.mcfinvarr{display:none;}

</style>


<script type="text/javascript" src="mcf.js"></script></head>

<body>

<div class="mcfcont">
<div id="mcftools">
  <b onclick="mcfaddvariant();">Tilføj variant</b> - <b onclick="mcfaddvariant('reset');">Nulstil</b>
</div>
<div class="mcfspc" id="mcftoolspc">&nbsp;</div>

<div id="mcfvhold">
<div style="position:absolute;top:50%;left:50%;width:300px;text-align:center;height:45px;margin: -30px 0px 0px -155px;border:1px solid black;padding:5px;">Javascript kræves for at bruge denne komponent.<br>- Aktiver Javascript i din browser og prøv igen -</div>
</div>
</div>

<div class="mcfcont2" id="mcfcont2">

<form method="GET" action="tmp.html#123" name="submclfvt">
<input type="text" name="addobjects" id="mcalcarr">
<input type="submit" value="Afsend formular">
</form>

</div>
</body></html>
Avatar billede mclemens Nybegynder
18. april 2006 - 21:19 #73
/* Scriptet startes */
window.onload=function(){mcfaddvariant('reset');}

mcfvars="";

/* Script til tilføjelse af start holder til variantnoder samt flere variantnoder */
function mcfaddvariant(ctrl){

if(ctrl=="reset")mcfvars = new Array();

mcf0=document.getElementById("mcfvhold"); // Forbindelse til stedet indholdet skal indsættes

if(ctrl=="reset"){
  document.getElementById("mcftools").style.display="block";
  document.getElementById("mcftoolspc").style.display="block";
  document.getElementById("mcfcont2").style.display="block";
  document.forms.submclfvt.onsubmit=function(){return mcalc();};
  mcfxtra0=document.createElement("div");
  mcfxtra0.setAttribute("id","mcfspcx123");
  mcfxtra0.className="mcfspc2";
  mcfxtra0b=document.createTextNode("\u00a0");
  mcfxtra0.appendChild(mcfxtra0b);
  mcf0.appendChild(mcfxtra0);
  document.getElementById("mcalcarr").value="";

}

mcf1=document.createElement("div");
mcf1.className="mcfvar";mcf1.setAttribute("id","mcfv"+(+mcfvars.length+1));

  mcf2a=document.createElement("div");
  mcf2a.className="mcfvbox";

  mcf2a1a=document.createElement("input");
  mcf2a1a.className="mcfvn";
  mcf2a1a.setAttribute("id","mcfvm"+(+mcfvars.length+1));
  mcf2a1a.setAttribute("type","text");mcf2a1a.setAttribute("name","variant"+(+mcfvars.length+1));

  mcf2a1b=document.createElement("input");
  mcf2a1b.onclick=function(){mcftypeadd(this.id);}
  mcf2a1b.className="mcfaddtype";
  mcf2a1b.setAttribute("id","mcftypeadd"+(+mcfvars.length+1));
  mcf2a1b.setAttribute("name","mcftypeadd"+(+mcfvars.length+1));
  mcf2a1b.setAttribute("type","button");mcf2a1b.setAttribute("value","Tilføj type");

  mcf2a1c=document.createElement("img");
  mcf2a1c.className="mcfvi";
  mcf2a1c.onclick=function(){mcfvarrem(this.id);}
  mcf2a1c.setAttribute("id","mcfvarrem"+(+mcfvars.length+1));
  mcf2a1c.setAttribute("src","sv.gif");mcf2a1c.setAttribute("alt","Fjern variant");

  mcf2a1d=document.createElement("input");
  mcf2a1d.className="mcfinvarr";
  mcf2a1d.setAttribute("id","mcfinvarr"+(+mcfvars.length+1));
  mcf2a1d.setAttribute("name","mcfinvarr"+(+mcfvars.length+1));
  mcf2a1d.setAttribute("type","text");mcf2a1d.setAttribute("value",1);

  mcf2a.appendChild(mcf2a1a);mcf2a.appendChild(mcf2a1b);
  mcf2a.appendChild(mcf2a1c);mcf2a.appendChild(mcf2a1d);
  mcf1.appendChild(mcf2a);

  mcfxtra0=document.createElement("div");
  mcfxtra0.className="mcfspc";
  mcfxtra0.setAttribute("id","mcfspcfirst"+(+mcfvars.length+1));
  mcfxtra0b=document.createTextNode("\u00a0");
  mcfxtra0.appendChild(mcfxtra0b);
  mcf1.appendChild(mcfxtra0);

  mcf2b=document.createElement("div");
  mcf2b.className="mcfminn";mcf2b.setAttribute("id","mcfv"+(+mcfvars.length+1)+"m");

  mcf2b1=document.createElement("div");
  mcf2b1.className="mcfmtype";mcf2b1.setAttribute("id","mcfv"+(+mcfvars.length+1)+"m1");

    mcf2b2a=document.createElement("input");
    mcf2b2a.className="mcfvn";
    mcf2b2a.onkeyup=function(){mcfchktype(this.id);}
    mcf2b2a.setAttribute("id","v"+(+mcfvars.length+1)+"n1");
    mcf2b2a.setAttribute("type","text");mcf2b2a.setAttribute("name","v"+(+mcfvars.length+1)+"n1");

    mcf2b2b=document.createElement("input");
    mcf2b2b.className="mcfvp";
    mcf2b2b.onchange=function(){mcfchktypev(this,0);}
    mcf2b2b.onclick=function(){mcfchktype(this.id);}
    mcf2b2b.setAttribute("id","v"+(+mcfvars.length+1)+"p1");
    mcf2b2b.setAttribute("type","text");mcf2b2b.setAttribute("name","v"+(+mcfvars.length+1)+"p1");

    mcf2b2c=document.createElement("input");
    mcf2b2c.className="mcfvv";
    mcf2b2c.onchange=function(){mcfchktypev(this,1);}
    mcf2b2c.onclick=function(){mcfchktype(this.id);}
    mcf2b2c.setAttribute("id","v"+(+mcfvars.length+1)+"v1");
    mcf2b2c.setAttribute("type","text");mcf2b2c.setAttribute("name","v"+(+mcfvars.length+1)+"v1");

    mcf2b2d=document.createElement("img");
    mcf2b2d.className="mcfvi";
    mcf2b2d.setAttribute("id","mcftyperem"+(+mcfvars.length+1)+"nr1");
    mcf2b2d.onclick=function(){mcftyperem(this.id);}
    mcf2b2d.setAttribute("src","dt.gif");mcf2b2d.setAttribute("alt","Fjern type");

    mcf2b1.appendChild(mcf2b2a);mcf2b1.appendChild(mcf2b2b);
    mcf2b1.appendChild(mcf2b2c);mcf2b1.appendChild(mcf2b2d);

  mcf2b.appendChild(mcf2b1);

  mcfxtra0=document.createElement("div");
  mcfxtra0.setAttribute("id","mcfspcv"+(+mcfvars.length+1)+"s1");
  mcfxtra0.className="mcfspc0";
  mcfxtra0b=document.createTextNode("\u00a0");
  mcfxtra0.appendChild(mcfxtra0b);
  mcf2b.appendChild(mcfxtra0);

  mcf1.appendChild(mcf2b);

  mcfxtra0=document.createElement("div");
  mcfxtra0.className="mcfspc";
  mcfxtra0b=document.createTextNode("\u00a0");
  mcfxtra0.appendChild(mcfxtra0b);
  mcf1.appendChild(mcfxtra0);

mcf0.appendChild(mcf1);

mcfvars[mcfvars.length]="1";

/* Fjerner alle noder i et element med id="mcfvhold" ved reset (som ved opstart) */
if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]);
}

function mcfvarrem(tmpn){
tnid=tmpn.replace("mcfvarrem","");
tn=document.getElementById("mcfv"+tnid);
tp=document.getElementById("mcfvhold");
tp.removeChild(tn);
mcfvars[tnid-1]=0;
}

function mcftypeadd(tmpn){
tnid=tmpn.replace("mcftypeadd","");

cnid=document.getElementById("mcfinvarr"+tnid);
cnid.value=+cnid.value+1;

  mcf2b=document.getElementById("mcfv"+tnid+"m");

  mcf2b1=document.createElement("div");
  mcf2b1.className="mcfmtype";mcf2b1.setAttribute("id","mcfv"+tnid+"m"+cnid.value);

    mcf2b2a=document.createElement("input");
    mcf2b2a.className="mcfvn";
    mcf2b2a.setAttribute("id","v"+tnid+"n"+cnid.value);
    mcf2b2a.onchange=function(){mcfchktype(this.id);}
    mcf2b2a.setAttribute("type","text");mcf2b2a.setAttribute("name","v"+tnid+"n"+cnid.value);

    mcf2b2b=document.createElement("input");
    mcf2b2b.className="mcfvp";
    mcf2b2b.onkeyup=function(){mcfchktypev(this,0);}
    mcf2b2b.onclick=function(){mcfchktype(this.id);}
    mcf2b2b.setAttribute("id","v"+tnid+"p"+cnid.value);
    mcf2b2b.setAttribute("type","text");mcf2b2b.setAttribute("name","v"+tnid+"p"+cnid.value);

    mcf2b2c=document.createElement("input");
    mcf2b2c.className="mcfvv";
    mcf2b2c.onchange=function(){mcfchktypev(this,1);}
    mcf2b2c.onclick=function(){mcfchktype(this.id);}
    mcf2b2c.setAttribute("id","v"+tnid+"v"+cnid.value);
    mcf2b2c.setAttribute("type","text");mcf2b2c.setAttribute("name","v"+tnid+"v"+cnid.value);

    mcf2b2d=document.createElement("img");
    mcf2b2d.className="mcfvi";
    mcf2b2d.setAttribute("id","mcftyperem"+tnid+"nr"+cnid.value);
    mcf2b2d.onclick=function(){mcftyperem(this.id);}
    mcf2b2d.setAttribute("src","dt.gif");mcf2b2d.setAttribute("alt","Fjern type");

    mcf2b1.appendChild(mcf2b2a);mcf2b1.appendChild(mcf2b2b);
    mcf2b1.appendChild(mcf2b2c);mcf2b1.appendChild(mcf2b2d);

  mcfxtra0=document.createElement("div");
  mcfxtra0.setAttribute("id","mcfspcv"+tnid+"s"+cnid.value);
  mcfxtra0.className="mcfspc";
  mcfxtra0b=document.createTextNode("\u00a0");
  mcfxtra0.appendChild(mcfxtra0b);
  mcf2b.appendChild(mcfxtra0);

  mcf2b.appendChild(mcf2b1);

}

function mcftyperem(tmpn){
tnid=tmpn.replace("mcftyperem","");
tnid=tnid.split("nr");
tp=document.getElementById("mcfv"+tnid[0]+"m");
if(tp.childNodes.length=="2")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig.");
else{
  tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]);
  tn2=document.getElementById("mcfspcv"+tnid[0]+"s"+tnid[1]);
  tp.removeChild(tn);
  tp.removeChild(tn2);
  if(tnid[1]==1){
    tn=document.getElementById("mcfspcfirst"+tnid[0]);
    tp=document.getElementById("mcfv"+tnid[0]);
    tp.removeChild(tn);
  }
}
}



function mcalc(){
submitok=false;
submitokoverrule=true;
mcft="";

for(i0=0;i0<mcfvars.length;i0++){
  if(mcfvars[i0]!=0){
  mcalctree(+i0+1);
  }
}
document.getElementById("mcalcarr").value=mcft;

if((!submitok)||(!submitokoverrule)){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;}
else return true;
}

function mcalctree(tnid){

mcftmp="";

i=document.getElementById("mcfinvarr"+tnid).value;

tmp=document.getElementById("mcfvm"+tnid).value;
if(tmp.indexOf("\[,\]")>-1){submitokoverrule=false;document.getElementById("mcfvm"+tnid).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}
chktmp=document.getElementById("mcfvm"+tnid).value;

if(chktmp!=""){
  for(i1=1;i1<=i;i1++){mcftmpadd=false;
  if(document.getElementById("v"+tnid+"n"+i1)){

    tmp=document.getElementById("v"+tnid+"n"+i1).value;
    if(tmp.indexOf("\[,\]")>-1){submitokoverrule=false;document.getElementById("v"+tnid+"n"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    chktest="[,]"+document.getElementById("v"+tnid+"n"+i1).value;
    if(chktest!="[,]"){submitok=true;mcftmpadd=true;
    mcftmp=mcftmp+chktest;

    tmp=document.getElementById("v"+tnid+"p"+i1).value;
    if(tmp.indexOf("\[,\]")>-1){submitokoverrule=false;document.getElementById("v"+tnid+"p"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"p"+i1).value;

    tmp=document.getElementById("v"+tnid+"v"+i1).value;
    if(tmp.indexOf("\[,\]")>-1){submitokoverrule=false;document.getElementById("v"+tnid+"v"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"v"+i1).value;
    }
  }
  if(mcftmpadd)mcft=mcft+"[;]"+chktmp+mcftmp;
  }
}
}


function mcfchktype(tmpid,chk){
if(tmpid.indexOf("n")<0){
  tmpid=tmpid.replace(/[pv]/gi,"n");
  tmpid="v"+tmpid.substr(1);
  tn=document.getElementById(tmpid);
  if(tn.value.replace(/ * /gi,"")==""){
  if(chk!=0)alert("Udfyld venligst type navn først");
  tn.value="";
  document.getElementById(tmpid.replace("n","p")).value="";
  document.getElementById(tmpid.replace("n","v")).value="";
  tn.focus();
  }
}else{
  tn=document.getElementById(tmpid);
  if(tn.value.replace(/ * /gi,"")==""){
  tn1=tn.id.replace("n","p");
  mcfchktype(tn1,0);
  }else{
  if((tn.value.indexOf("[,]")>-1)||(tn.value.indexOf("[;]")>-1)){
    alert("Følgende tegnkombinationer må ikke være i navne feltet:\n[,] og [;] ... , og ; må godt være i feltet\n- bare ikke med [] lige rundt om sig\nDe nævnte tegnkombinationer er blevet fjernet.");
    tn.value=tn.value.replace(/(\[,\])?(\[;\])?/g,"");
  }
  }
}
}

function mcfchktypev(tmpid,chk){
if(chk==0){
  regsearch=tmpid.value.match(/[+-]?\d+(\.\d{2})?/);
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else{
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre og . efterfulgt af to cifre\nf.eks.: +145.21 eller -1.85");
  tmpid.value="";
  }
}else{
  regsearch=tmpid.value.match(/[+-]?\d+/)
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else{
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre\nf.eks.: +145 eller -1");
  tmpid.value="";
  }
}
}
Avatar billede mclemens Nybegynder
18. april 2006 - 21:22 #74
... scriptet kan forkortes har bare ikke lige tid til at flytte rundt på rodet og stille det i kompakt system p.t.... fordelen ved den lange kode er også, at det kan være lidt lettere at overskue, hvad der sker i de forskellige trin ( dårlig undskyldning :P )...
Avatar billede elskermad.dk Nybegynder
18. april 2006 - 21:58 #75
tjae men det er helt i orden... prøver at sætte mig ind i koden! kanske jeg melder tilbage med lidt spørgsmål ang. scriptet så lad lige vær med at at afmelde abonneringen :)
Avatar billede mclemens Nybegynder
18. april 2006 - 22:03 #76
... jeg får som regel ingen emails på de tråde jeg tidligere
har abonneret på men prøver da lige at abonnere på denne ...
Avatar billede mclemens Nybegynder
18. april 2006 - 22:03 #77
- og tak for point :)
Avatar billede mclemens Nybegynder
19. april 2006 - 00:38 #78
og en lille vigtig rettelse :P

(det uploadede script er rettet til den nye udgave om ca. 3 min.)
kør ellers evt. en erstatning af denne linje i scriptet:
( ... der var problemer med at man ikke kunne indtaste [,] men godt [;]
fordi jeg havde glemt at tjekke på den også :P )

if(tmp.indexOf("\[,\]")>-1)

skiftes til denne linje:

if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1))
Avatar billede elskermad.dk Nybegynder
22. april 2006 - 16:36 #79
Hvis du stadig er 'tilmeldt' så havde jeg helt glemt en ret så vigtig ting:

tror ikke det er så svært (vel blot lidt tilføjelser i js-scriptet) men jeg havde helt glemt der skal skulle være et felt mere i forbindelse med pris og vægt felterne - Denne skal hedde lager og må kun indeholde taltegn uden +/-

er det muligt at sætte ind?
Avatar billede mclemens Nybegynder
22. april 2006 - 17:07 #80
[ Denne skal hedde lager og må kun indeholde taltegn uden +/- ]
[ er det muligt at sætte ind? ]
- Kigger på den om et lille stykke tid, det burde ikke være et problem...
Avatar billede mclemens Nybegynder
22. april 2006 - 17:35 #81
Sådan (tror jeg nok)...
Avatar billede mclemens Nybegynder
22. april 2006 - 17:39 #82
næsten valideringen skal lige i orden :P
Avatar billede mclemens Nybegynder
22. april 2006 - 17:41 #83
sådan :) havde brugt et regexp /d+/ istedet for /\d+/
Avatar billede elskermad.dk Nybegynder
22. april 2006 - 17:52 #84
perfekt som altid :)
Avatar billede mclemens Nybegynder
22. april 2006 - 17:56 #85
Håber du tog den efter 17:47 der var lige en lille bug med [,] vs. [;] i det nye felt det ikke blev fjernet ved indtastning og omgående submit ...
Avatar billede elskermad.dk Nybegynder
22. april 2006 - 18:06 #86
Den er gemt lokalt kl. 17:51 så det tror jeg at jeg gjorde :) Den kan også godt submitte korrekt (den smider alt fald informationer i adresselisten)
Avatar billede mclemens Nybegynder
22. april 2006 - 18:10 #87
super :)
Avatar billede elskermad.dk Nybegynder
01. maj 2006 - 16:47 #88
hej igen mclemens :P

jeg har nu haft lidt tid til at prøve at sætte det ind i mit system og er faldet over et par fejl... hvis du har tiden til det har jeg fundet nedenstående, ellers må jeg lige have oprettet et spørgsmål mere:

- Der er noget galt med tælningen af at der skal være mindst én type under hver variant - Det er muligt at slette typen lige med det samme inden man indtaster noget eller tilføjer flere typer - Hvis man derimod tilføjer en række ekstra typer inden man gør andet kan man slette de overflødende indtil man har to varianter tilbage - det burde vel skulle være én?
- Der er heller ikke validering for om varianten har fået et navn før man begynder at indskrive typer under varianten

har du en mailadresse jeg kan skrive til? så kan du lige få login og se der jeg har sat det op indtil videre
Avatar billede mclemens Nybegynder
01. maj 2006 - 23:25 #89
Hejsa,
[ - Der er noget galt med tælningen af at der skal være mindst én type under hver variant - Det er muligt at slette typen lige med det samme inden man indtaster noget eller tilføjer flere typer - Hvis man derimod tilføjer en række ekstra typer inden man gør andet kan man slette de overflødende indtil man har to varianter tilbage - det burde vel skulle være én? ]
- Kan slet ikke få den til at gøre det du nævner... heller ikke selv om jeg bruger den nævnte procedure :/


[ - Der er heller ikke validering for om varianten har fået et navn før man begynder at indskrive typer under varianten ]
- Den kigger jeg lige på...


[ har du en mailadresse jeg kan skrive til? så kan du lige få login og se der jeg har sat det op indtil videre ]
... Foretrækker at være anonym - har det bedst med det ... du er dog velkommen til at kaste en test fil op herinde så hvis jeg ikke kan se løsningen er der muligvis en anden der kan - det er jo styrken ved eksperten...

Du kan selvfølgelig også kaste et link til et testområde der ikke er koblet til dit system d.v.s. så det ikke poster til dit indhold ...

... piller lidt ved den validering og kaster det op igen ...
Avatar billede mclemens Nybegynder
01. maj 2006 - 23:25 #90
(undskyld den sene respons)
Avatar billede mclemens Nybegynder
01. maj 2006 - 23:40 #91
uploaded...
Avatar billede mclemens Nybegynder
01. maj 2006 - 23:57 #92
Kom lige i tanke om at du sikkert mente at du også ville have validering på at man ikke kunne skrive navnet i typen før der var angivet et i varianten... det kigger jeg lige på imorgen :) - lidt træt idag ...
Avatar billede mclemens Nybegynder
02. maj 2006 - 00:08 #93
kunne ikke lade være alligevel ... (uploaded)
Avatar billede elskermad.dk Nybegynder
02. maj 2006 - 09:51 #94
Det er selvfølgelig helt i orden du foretrækker at være annonym :)

Jeg har lidt svært ved at gennemskue hvad du har ændret i koden (går ud fra det er i js-filen) Jeg har nemlig tilpasset den en del for at få det til at passe ind i mit system (størrelser, titles og lidt andet) og ville derfor gerne hvis det var muligt at tilføje ind i mit - Er det den andensidste funktion?

Ser ud til at mit første spørgsmål i 01/05-2006 16:47:44 fungere fint på din host - Har du ændret i koden, eller har jeg lavet noget forkert i min kode?

Smider lige min js-kode op i nedenstående kommentar:
Avatar billede elskermad.dk Nybegynder
02. maj 2006 - 09:52 #95
mcfvars="";

/* Script til tilføjelse af start holder til variantnoder samt flere variantnoder */
function mcfaddvariant(ctrl){

if(ctrl=="reset") mcfvars = new Array();

mcf0=document.getElementById("mcfvhold"); // Forbindelse til stedet indholdet skal indsættes

if(ctrl=="reset"){
  document.getElementById("mcftools").style.display="block";
  document.getElementById("mcfcont2").style.display="block";
  document.forms.opret.onsubmit=function(){return mcalc();};
  mcfxtra0=document.createElement("div");
  mcfxtra0.setAttribute("id","mcfspcx123");
  mcfxtra0.className="mcfspc2";
  mcfxtra0b=document.createTextNode("\u00a0");
  mcfxtra0.appendChild(mcfxtra0b);
  mcf0.appendChild(mcfxtra0);
  document.getElementById("mcalcarr").value="";

}

mcf1=document.createElement("div");
mcf1.className="mcfvar";
mcf1.setAttribute("id","mcfv"+(+mcfvars.length+1));

  mcf2a=document.createElement("div");
  mcf2a.className="mcfvbox";

  mcf2a1a=document.createElement("input");
  mcf2a1a.style.width="200px";
  mcf2a1a.style.marginRight="3px";
  mcf2a1a.title="Indtast navnet på varianten";
  mcf2a1a.setAttribute("id","mcfvm"+(+mcfvars.length+1));
  mcf2a1a.setAttribute("type","text");
  mcf2a1a.setAttribute("name","variant"+(+mcfvars.length+1));

  mcf2a1b=document.createElement("input");
  mcf2a1b.style.marginRight="3px";
  mcf2a1b.onclick=function(){mcftypeadd(this.id);}
  mcf2a1b.setAttribute("id","mcftypeadd"+(+mcfvars.length+1));
  mcf2a1b.setAttribute("name","mcftypeadd"+(+mcfvars.length+1));
  mcf2a1b.setAttribute("type","button");
  mcf2a1b.setAttribute("value","Tilføj type");

  mcf2a1c=document.createElement("input");
  mcf2a1c.onclick=function(){mcfvarrem(this.id);}
  mcf2a1c.setAttribute("id","mcfvarrem"+(+mcfvars.length+1));
  mcf2a1c.setAttribute("name","mcfvarrem"+(+mcfvars.length+1));
  mcf2a1c.setAttribute("type","button");
  mcf2a1c.setAttribute("value","Fjern type");

  mcf2a1d=document.createElement("input");
  mcf2a1d.className="mcfinvarr";
  mcf2a1d.setAttribute("id","mcfinvarr"+(+mcfvars.length+1));
  mcf2a1d.setAttribute("name","mcfinvarr"+(+mcfvars.length+1));
  mcf2a1d.setAttribute("type","hidden");
  mcf2a1d.setAttribute("value",1);

  mcf2a.appendChild(mcf2a1a);mcf2a.appendChild(mcf2a1b);
  mcf2a.appendChild(mcf2a1c);mcf2a.appendChild(mcf2a1d);
  mcf1.appendChild(mcf2a);

  mcf2b=document.createElement("div");
  mcf2b.className="mcfminn";
  mcf2b.setAttribute("id","mcfv"+(+mcfvars.length+1)+"m");

  mcf2b1=document.createElement("div");
  mcf2b1.className="mcfmtype";
  mcf2b1.setAttribute("id","mcfv"+(+mcfvars.length+1)+"m1");

    mcf2b2a=document.createElement("input");
    mcf2b2a.style.width="220px";
    mcf2b2a.style.marginRight="3px";
    mcf2b2a.title="Indtast navnet på typen";
    mcf2b2a.onkeyup=function(){mcfchktype(this.id);}
    mcf2b2a.setAttribute("id","v"+(+mcfvars.length+1)+"n1");
    mcf2b2a.setAttribute("type","text");
    mcf2b2a.setAttribute("name","v"+(+mcfvars.length+1)+"n1");

    mcf2b2b=document.createElement("input");
    mcf2b2b.style.width="50px";
    mcf2b2b.style.marginRight="3px";
    mcf2b2b.title="Indtast prisforskel på typen";
    mcf2b2b.onchange=function(){mcfchktypev(this,0);}
    mcf2b2b.onclick=function(){mcfchktype(this.id);}
    mcf2b2b.setAttribute("id","v"+(+mcfvars.length+1)+"p1");
    mcf2b2b.setAttribute("type","text");
    mcf2b2b.setAttribute("name","v"+(+mcfvars.length+1)+"p1");

    mcf2b2c=document.createElement("input");
    mcf2b2c.style.width="50px";
    mcf2b2c.style.marginRight="3px";
    mcf2b2c.title="Indtast vægtforskel på typen";
    mcf2b2c.onchange=function(){mcfchktypev(this,1);}
    mcf2b2c.onclick=function(){mcfchktype(this.id);}
    mcf2b2c.setAttribute("id","v"+(+mcfvars.length+1)+"v1");
    mcf2b2c.setAttribute("type","text");
    mcf2b2c.setAttribute("name","v"+(+mcfvars.length+1)+"v1");

    mcf2b2c2=document.createElement("input");
    mcf2b2c2.style.width="50px";
    mcf2b2c2.style.marginRight="3px";
    mcf2b2c2.title="Indtast lagerstatus på typen";
    mcf2b2c2.onchange=function(){mcfchktypev(this,2);}
    mcf2b2c2.onclick=function(){mcfchktype(this.id);}
    mcf2b2c2.setAttribute("id","v"+(+mcfvars.length+1)+"s1");
    mcf2b2c2.setAttribute("type","text");
    mcf2b2c2.setAttribute("name","v"+(+mcfvars.length+1)+"s1");




    mcf2b2d=document.createElement("img");
    mcf2b2d.className="mcfvi";
    mcf2b2d.setAttribute("id","mcftyperem"+(+mcfvars.length+1)+"nr1");
    mcf2b2d.onclick=function(){mcftyperem(this.id);}
    mcf2b2d.setAttribute("src","../_grafik/delete.gif");
    mcf2b2d.setAttribute("alt","Fjern type");




    mcf2b1.appendChild(mcf2b2a);
    mcf2b1.appendChild(mcf2b2b);
    mcf2b1.appendChild(mcf2b2c);
    mcf2b1.appendChild(mcf2b2c2);
    mcf2b1.appendChild(mcf2b2d);



  mcf2b.appendChild(mcf2b1);

  mcf1.appendChild(mcf2b);

mcf0.appendChild(mcf1);

mcfvars[mcfvars.length]="1";

/* Fjerner alle noder i et element med id="mcfvhold" ved reset (som ved opstart) */
if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]);
}

function mcfvarrem(tmpn){
tnid=tmpn.replace("mcfvarrem","");
tn=document.getElementById("mcfv"+tnid);
tp=document.getElementById("mcfvhold");
tp.removeChild(tn);
mcfvars[tnid-1]=0;
}

function mcftypeadd(tmpn){
tnid=tmpn.replace("mcftypeadd","");

cnid=document.getElementById("mcfinvarr"+tnid);
cnid.value=+cnid.value+1;

  mcf2b=document.getElementById("mcfv"+tnid+"m");

  mcf2b1=document.createElement("div");
  mcf2b1.className="mcfmtype";
  mcf2b1.setAttribute("id","mcfv"+tnid+"m"+cnid.value);

    mcf2b2a=document.createElement("input");
    mcf2b2a.style.width="220px";
    mcf2b2a.style.marginRight="3px";
    mcf2b2a.title="Indtast navn på typen";
    mcf2b2a.setAttribute("id","v"+tnid+"n"+cnid.value);
    mcf2b2a.onchange=function(){mcfchktype(this.id);}
    mcf2b2a.setAttribute("type","text");
    mcf2b2a.setAttribute("name","v"+tnid+"n"+cnid.value);

    mcf2b2b=document.createElement("input");
    mcf2b2b.style.width="50px";
    mcf2b2b.style.marginRight="3px";
    mcf2b2b.title="Indtast prisforskel på typen";
    mcf2b2b.onkeyup=function(){mcfchktypev(this,0);}
    mcf2b2b.onclick=function(){mcfchktype(this.id);}
    mcf2b2b.setAttribute("id","v"+tnid+"p"+cnid.value);
    mcf2b2b.setAttribute("type","text");
    mcf2b2b.setAttribute("name","v"+tnid+"p"+cnid.value);

    mcf2b2c=document.createElement("input");
    mcf2b2c.style.width="50px";
    mcf2b2c.style.marginRight="3px";
    mcf2b2c.title="Indtast vægtforskel på typen";
    mcf2b2c.onchange=function(){mcfchktypev(this,1);}
    mcf2b2c.onclick=function(){mcfchktype(this.id);}
    mcf2b2c.setAttribute("id","v"+tnid+"v"+cnid.value);
    mcf2b2c.setAttribute("type","text");
    mcf2b2c.setAttribute("name","v"+tnid+"v"+cnid.value);



    mcf2b2c2=document.createElement("input");
    mcf2b2c2.style.width="50px";
    mcf2b2c2.style.marginRight="3px";
    mcf2b2c2.title="Indtast lagerstatus på typen";
    mcf2b2c2.onchange=function(){mcfchktypev(this,2);}
    mcf2b2c2.onclick=function(){mcfchktype(this.id);}
    mcf2b2c2.setAttribute("id","v"+tnid+"s"+cnid.value);
    mcf2b2c2.setAttribute("type","text");
    mcf2b2c2.setAttribute("name","v"+tnid+"s"+cnid.value);



    mcf2b2d=document.createElement("img");
    mcf2b2d.className="mcfvi";
    mcf2b2d.setAttribute("id","mcftyperem"+tnid+"nr"+cnid.value);
    mcf2b2d.onclick=function(){mcftyperem(this.id);}
    mcf2b2d.setAttribute("src","../_grafik/delete.gif");
    mcf2b2d.setAttribute("alt","Fjern type");



    mcf2b1.appendChild(mcf2b2a);
    mcf2b1.appendChild(mcf2b2b);
    mcf2b1.appendChild(mcf2b2c);
    mcf2b1.appendChild(mcf2b2c2);
    mcf2b1.appendChild(mcf2b2d);

  mcf2b.appendChild(mcf2b1);

}

function mcftyperem(tmpn){
tnid=tmpn.replace("mcftyperem","");
tnid=tnid.split("nr");
tp=document.getElementById("mcfv"+tnid[0]+"m");
if(tp.childNodes.length=="2")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig.");
else{
  tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]);
  tn2=document.getElementById("mcfspcv"+tnid[0]+"s"+tnid[1]);
  tp.removeChild(tn);
  tp.removeChild(tn2);
  if(tnid[1]==1){
    tn=document.getElementById("mcfspcfirst"+tnid[0]);
    tp=document.getElementById("mcfv"+tnid[0]);
    tp.removeChild(tn);
  }
}
}



function mcalc(){
submitok=false;
submitokoverrule=true;
mcft="";

for(i0=0;i0<mcfvars.length;i0++){
  if(mcfvars[i0]!=0){
  mcalctree(+i0+1);
  }
}
document.getElementById("mcalcarr").value=mcft;

if((!submitok)||(!submitokoverrule)){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;}
else return true;
}

function mcalctree(tnid){

mcftmp="";

i=document.getElementById("mcfinvarr"+tnid).value;

tmp=document.getElementById("mcfvm"+tnid).value;
if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("mcfvm"+tnid).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}
chktmp=document.getElementById("mcfvm"+tnid).value;

if(chktmp!=""){
  for(i1=1;i1<=i;i1++){mcftmpadd=false;
  if(document.getElementById("v"+tnid+"n"+i1)){

    tmp=document.getElementById("v"+tnid+"n"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"n"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    chktest="[,]"+document.getElementById("v"+tnid+"n"+i1).value;
    if(chktest!="[,]"){submitok=true;mcftmpadd=true;
    mcftmp=mcftmp+chktest;

    tmp=document.getElementById("v"+tnid+"p"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"p"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"p"+i1).value;

    tmp=document.getElementById("v"+tnid+"v"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"v"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"v"+i1).value;

    tmp=document.getElementById("v"+tnid+"s"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"s"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"s"+i1).value;
    }
  }
  if(mcftmpadd)mcft=mcft+"[;]"+chktmp+mcftmp;
  }
}
}


function mcfchktype(tmpid,chk){
if(tmpid.indexOf("n")<0){
  tmpid=tmpid.replace(/[pvs]/gi,"n");
  tmpid="v"+tmpid.substr(1);
  tn=document.getElementById(tmpid);
  if(tn.value.replace(/ * /gi,"")==""){
  if(chk!=0)alert("Udfyld venligst type navn først");
  tn.value="";
  document.getElementById(tmpid.replace("n","p")).value="";
  document.getElementById(tmpid.replace("n","v")).value="";
  document.getElementById(tmpid.replace("n","s")).value="";
  tn.focus();
  }
}else{
  tn=document.getElementById(tmpid);
  if(tn.value.replace(/ * /gi,"")==""){
  tn1=tn.id.replace("n","p");
  mcfchktype(tn1,0);
  }else{
  if((tn.value.indexOf("[,]")>-1)||(tn.value.indexOf("[;]")>-1)){
    alert("Følgende tegnkombinationer må ikke være i navne feltet:\n[,] og [;] ... , og ; må godt være i feltet\n- bare ikke med [] lige rundt om sig\nDe nævnte tegnkombinationer er blevet fjernet.");
    tn.value=tn.value.replace(/(\[,\])?(\[;\])?/g,"");
  }
  }
}
}

function mcfchktypev(tmpid,chk){
if(chk==0){
  regsearch=tmpid.value.match(/[+-]?\d+(\.\d{2})?/);
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else{
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre og . efterfulgt af to cifre\nf.eks.: +145.21 eller -1.85");
  tmpid.value="";
  }
}else if(chk==1){
  regsearch=tmpid.value.match(/[+-]?\d+/)
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else{
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre\nf.eks.: +145 eller -1");
  tmpid.value="";
  }
}else{
  regsearch=tmpid.value.match(/\d+/)
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else{
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\nIntet fortegn samt x-antal cifre");
  tmpid.value="";
  }
}
}
Avatar billede mclemens Nybegynder
02. maj 2006 - 12:20 #96
[ Jeg har lidt svært ved at gennemskue hvad du har ændret i koden (går ud fra det er i js-filen) Jeg har nemlig tilpasset den en del for at få det til at passe ind i mit system (størrelser, titles og lidt andet) og ville derfor gerne hvis det var muligt at tilføje ind i mit - Er det den andensidste funktion? ]


    mcf2b2a.onfocus=function(){mcfchktype(this.id,2);} // Tilføjet!!!
^ 2 stk. af disse er tilføjet


    mcf2b2b / mcf2b2c / mcf2b2d.onfocus=function(){mcfchktype(this.id);} // click -> focus
^ Disse har fået rettet event fra onclick til onfocus


function mcfchktypev(tmpid,chk){
...
^ Dette functions afsnit er blevet rettet


[ Ser ud til at mit første spørgsmål i 01/05-2006 16:47:44 fungere fint på din host - Har du ændret i koden, eller har jeg lavet noget forkert i min kode? ]
^ Testede inden jeg pillede ved koden og da brokkede den sig ikke så det må være i din tilrettede kode der ligger noget :/ ... det eneste jeg har tilføjet det er at velideringen bliver aktiveret i under felter når man bruger tab til fokussering såvel som mus - derfor onclick til onfocus og så har jeg tilføjet validering på input type navnet...


[Smider lige min js-kode op i nedenstående kommentar:]
... ok, kigger nok på det iaften ...
Avatar billede mclemens Nybegynder
02. maj 2006 - 19:28 #97
Du har pillet et par controlspacers ud ... regner ikke med at det har den store betydning på scriptet... men det var nogle jeg satte ind af hensyn til childnodes kontrol og margin tror jeg nok ...

Prøv evt. denne script del og tag evt. herefter rettelserne fra min js kildefil - (det der er blevet rettet i min kildefil står nævnt ovenover...)

function mcftyperem(tmpn){
tnid=tmpn.replace("mcftyperem","");
tnid=tnid.split("nr");
tp=document.getElementById("mcfv"+tnid[0]+"m");
if(tp.childNodes.length=="1")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig.");
else{
  tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]);
//  tn2=document.getElementById("mcfspcv"+tnid[0]+"s"+tnid[1]);
  tp.removeChild(tn);
//  tp.removeChild(tn2);
/*  if(tnid[1]==1){
    tn=document.getElementById("mcfspcfirst"+tnid[0]);
    tp=document.getElementById("mcfv"+tnid[0]);
    tp.removeChild(tn);
  }*/
}
}
Avatar billede elskermad.dk Nybegynder
06. maj 2006 - 15:25 #98
Jeg har stadig ikke helt fået styr på det endnu desværre, men er rendt ind i et større problem :S

Jeg gemmer jo outputten fra din funktion og for at kunne redigere i oplysningerne bagefter skal jeg kunne genopbygge varianterne med tilhørende typer..

Jeg har fået scriptet outputtet til en array vha. php således den er bygget sådan her op:

array {
  ["farve"] array {
      ["sort"] array {
        [0] -> 30
        [1] -> -10
        [2] ->
      }
      ["hvid"] array {
        [0] ->
        [1] -> 200
        [2] -> 6
      }
    }
    ["størrelse"] array {
        ["large"] array {
          [0] -> 100
          [1] -> 40
          [2] -> 6
        }
    }
}

Hvilke variabler skal jeg manuelt indstille således at den kan bruge disse elementer selvom de ikke er sat med funktionen?

Jeg indskriver dem sådan her:

                <div id='mcfvhold'>
        <div class='mcfvar' id='mcfv1'>
            <input type='text' id='mcfvm1' value='Farve' style='margin-rigth:3px;width:200px' title='Indtast navnet på varianten'>
            <input type='button' id='mcftypeadd1' value='Tilføj type' style='margin-rigth:3px'>
            <input type='button' id='mcfvarrem1' value='Fjern type' style='margin-rigth:3px'>
           
            <div class='mcfminn' id='mcfv1m'>
        <input type='text' id='v1n1' value='Hvid' style='margin-left:20px;margin-right:3px;width:200px' title='Indtast navnet på typen'><input type='text' id='v1p1' value='-50' style='margin-right:3px;width:50px' title='Indtast prisforskel på typen'><input type='text' id='v1v1' value='' style='margin-right:3px;width:50px' title='Indtast vægtforskel på typen'><input type='text' id='v1s1' value='12' style='width:50px' title='Indtast lagerstatus på typen'><br><input type='text' id='v1n2' value='Rød' style='margin-left:20px;margin-right:3px;width:200px' title='Indtast navnet på typen'><input type='text' id='v1p2' value='' style='margin-right:3px;width:50px' title='Indtast prisforskel på typen'><input type='text' id='v1v2' value='' style='margin-right:3px;width:50px' title='Indtast vægtforskel på typen'><input type='text' id='v1s2' value='9' style='width:50px' title='Indtast lagerstatus på typen'><br><input type='text' id='v1n3' value='Grøn' style='margin-left:20px;margin-right:3px;width:200px' title='Indtast navnet på typen'><input type='text' id='v1p3' value='' style='margin-right:3px;width:50px' title='Indtast prisforskel på typen'><input type='text' id='v1v3' value='' style='margin-right:3px;width:50px' title='Indtast vægtforskel på typen'><input type='text' id='v1s3' value='2' style='width:50px' title='Indtast lagerstatus på typen'><br><input type='text' id='v1n4' value='Blå' style='margin-left:20px;margin-right:3px;width:200px' title='Indtast navnet på typen'><input type='text' id='v1p4' value='20' style='margin-right:3px;width:50px' title='Indtast prisforskel på typen'><input type='text' id='v1v4' value='' style='margin-right:3px;width:50px' title='Indtast vægtforskel på typen'><input type='text' id='v1s4' value='15' style='width:50px' title='Indtast lagerstatus på typen'><br>
            </div>
        </div>
       
        <div class='mcfvar' id='mcfv2'>
            <input type='text' id='mcfvm2' value='Størrelse' style='margin-rigth:3px;width:200px' title='Indtast navnet på varianten'>
            <input type='button' id='mcftypeadd2' value='Tilføj type' style='margin-rigth:3px'>
            <input type='button' id='mcfvarrem2' value='Fjern type' style='margin-rigth:3px'>
           
            <div class='mcfminn' id='mcfv2m'>
        <input type='text' id='v2n1' value='Small' style='margin-left:20px;margin-right:3px;width:200px' title='Indtast navnet på typen'><input type='text' id='v2p1' value='-50' style='margin-right:3px;width:50px' title='Indtast prisforskel på typen'><input type='text' id='v2v1' value='-100' style='margin-right:3px;width:50px' title='Indtast vægtforskel på typen'><input type='text' id='v2s1' value='' style='width:50px' title='Indtast lagerstatus på typen'><br><input type='text' id='v2n2' value='Medium' style='margin-left:20px;margin-right:3px;width:200px' title='Indtast navnet på typen'><input type='text' id='v2p2' value='' style='margin-right:3px;width:50px' title='Indtast prisforskel på typen'><input type='text' id='v2v2' value='' style='margin-right:3px;width:50px' title='Indtast vægtforskel på typen'><input type='text' id='v2s2' value='6' style='width:50px' title='Indtast lagerstatus på typen'><br><input type='text' id='v2n3' value='Large' style='margin-left:20px;margin-right:3px;width:200px' title='Indtast navnet på typen'><input type='text' id='v2p3' value='75' style='margin-right:3px;width:50px' title='Indtast prisforskel på typen'><input type='text' id='v2v3' value='250' style='margin-right:3px;width:50px' title='Indtast vægtforskel på typen'><input type='text' id='v2s3' value='1' style='width:50px' title='Indtast lagerstatus på typen'><br>
            </div>
        </div>
        </div>


Jeg har det liggende her: http://shop.epostbud.dk/admin brugernavn: anders - password: 1234 -> Under oprettelse under Produkter -> Nede i bunden hvor der står varianter... (så kan du også se min js-fil mv.)

Jeg vil meget gerne honorerer dit arbejde med 1.000,- hvis du vil hjælpe mig med at få det op og fungere 100% :)
Avatar billede elskermad.dk Nybegynder
06. maj 2006 - 15:26 #99
På siden skal du selv indtaste nogle varianter/typer og trykke 'opret produkt' før at de manuelt indsatte varianter kommer frem
Avatar billede mclemens Nybegynder
06. maj 2006 - 17:57 #100
Javascriptet modeller.js:

mcfvars="";

/* Script til tilføjelse af start holder til variantnoder samt flere variantnoder */
function mcfaddvariant(ctrl){

if(ctrl=="reset") mcfvars = new Array();

mcf0=document.getElementById("mcfvhold"); // Forbindelse til stedet indholdet skal indsættes

if(ctrl=="reset"){
  document.getElementById("mcftools").style.display="block";
  document.getElementById("mcfcont2").style.display="block";
  document.forms.opret.onsubmit=function(){return mcalc();};
  mcfxtra0=document.createElement("div");
  mcfxtra0.setAttribute("id","mcfspcx123");
  mcfxtra0.className="mcfspc2";
  mcfxtra0b=document.createTextNode("\u00a0");
  mcfxtra0.appendChild(mcfxtra0b);
  mcf0.appendChild(mcfxtra0);
  document.getElementById("mcalcarr").value="";

}

mcf1=document.createElement("div");
mcf1.className="mcfvar";
mcf1.setAttribute("id","mcfv"+(+mcfvars.length+1));

  mcf2a=document.createElement("div");
  mcf2a.className="mcfvbox";

  mcf2a1a=document.createElement("input");
  mcf2a1a.style.width="200px";
  mcf2a1a.style.marginRight="3px";
  mcf2a1a.title="Indtast navnet på varianten";
  mcf2a1a.setAttribute("id","mcfvm"+(+mcfvars.length+1));
  mcf2a1a.setAttribute("type","text");
  mcf2a1a.setAttribute("name","variant"+(+mcfvars.length+1));

  mcf2a1b=document.createElement("input");
  mcf2a1b.style.marginRight="3px";
  mcf2a1b.onclick=function(){mcftypeadd(this.id);}
  mcf2a1b.setAttribute("id","mcftypeadd"+(+mcfvars.length+1));
  mcf2a1b.setAttribute("name","mcftypeadd"+(+mcfvars.length+1));
  mcf2a1b.setAttribute("type","button");
  mcf2a1b.setAttribute("value","Tilføj type");

  mcf2a1c=document.createElement("input");
  mcf2a1c.onclick=function(){mcfvarrem(this.id);}
  mcf2a1c.setAttribute("id","mcfvarrem"+(+mcfvars.length+1));
  mcf2a1c.setAttribute("name","mcfvarrem"+(+mcfvars.length+1));
  mcf2a1c.setAttribute("type","button");
  mcf2a1c.setAttribute("value","Fjern type");

  mcf2a1d=document.createElement("input");
  mcf2a1d.className="mcfinvarr";
  mcf2a1d.setAttribute("id","mcfinvarr"+(+mcfvars.length+1));
  mcf2a1d.setAttribute("name","mcfinvarr"+(+mcfvars.length+1));
  mcf2a1d.setAttribute("type","hidden");
  mcf2a1d.setAttribute("value",1);

  mcf2a.appendChild(mcf2a1a);mcf2a.appendChild(mcf2a1b);
  mcf2a.appendChild(mcf2a1c);mcf2a.appendChild(mcf2a1d);
  mcf1.appendChild(mcf2a);

  mcf2b=document.createElement("div");
  mcf2b.className="mcfminn";
  mcf2b.setAttribute("id","mcfv"+(+mcfvars.length+1)+"m");

  mcf2b1=document.createElement("div");
  mcf2b1.className="mcfmtype";
  mcf2b1.setAttribute("id","mcfv"+(+mcfvars.length+1)+"m1");

    mcf2b2a=document.createElement("input");
    mcf2b2a.style.width="200px";
    mcf2b2a.style.marginLeft="20px";
    mcf2b2a.style.marginRight="3px";
    mcf2b2a.title="Indtast navnet på typen";
    mcf2b2a.onkeyup=function(){mcfchktype(this.id);}
    mcf2b2a.setAttribute("id","v"+(+mcfvars.length+1)+"n1");
    mcf2b2a.setAttribute("type","text");
    mcf2b2a.setAttribute("name","v"+(+mcfvars.length+1)+"n1");
   
    mcf2b2a.onfocus=function(){mcfchktype(this.id,2);}

    mcf2b2b=document.createElement("input");
    mcf2b2b.style.width="50px";
    mcf2b2b.style.marginRight="3px";
    mcf2b2b.title="Indtast prisforskel på typen";
    mcf2b2b.onchange=function(){mcfchktypev(this,0);}
    mcf2b2b.onfocus=function(){mcfchktype(this.id);}
    mcf2b2b.setAttribute("id","v"+(+mcfvars.length+1)+"p1");
    mcf2b2b.setAttribute("type","text");
    mcf2b2b.setAttribute("name","v"+(+mcfvars.length+1)+"p1");

    mcf2b2c=document.createElement("input");
    mcf2b2c.style.width="50px";
    mcf2b2c.style.marginRight="3px";
    mcf2b2c.title="Indtast vægtforskel på typen";
    mcf2b2c.onchange=function(){mcfchktypev(this,1);}
    mcf2b2c.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c.setAttribute("id","v"+(+mcfvars.length+1)+"v1");
    mcf2b2c.setAttribute("type","text");
    mcf2b2c.setAttribute("name","v"+(+mcfvars.length+1)+"v1");

    mcf2b2c2=document.createElement("input");
    mcf2b2c2.style.width="50px";
    mcf2b2c2.style.marginRight="3px";
    mcf2b2c2.title="Indtast lagerstatus på typen";
    mcf2b2c2.onchange=function(){mcfchktypev(this,2);}
    mcf2b2c2.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c2.setAttribute("id","v"+(+mcfvars.length+1)+"s1");
    mcf2b2c2.setAttribute("type","text");
    mcf2b2c2.setAttribute("name","v"+(+mcfvars.length+1)+"s1");




    mcf2b2d=document.createElement("img");
    mcf2b2d.className="mcfvi";
    mcf2b2d.setAttribute("id","mcftyperem"+(+mcfvars.length+1)+"nr1");
    mcf2b2d.onclick=function(){mcftyperem(this.id);}
    mcf2b2d.setAttribute("src","../_grafik/delete.gif");
    mcf2b2d.setAttribute("alt","Fjern type");




    mcf2b1.appendChild(mcf2b2a);
    mcf2b1.appendChild(mcf2b2b);
    mcf2b1.appendChild(mcf2b2c);
    mcf2b1.appendChild(mcf2b2c2);
    mcf2b1.appendChild(mcf2b2d);



  mcf2b.appendChild(mcf2b1);

  mcf1.appendChild(mcf2b);

mcf0.appendChild(mcf1);

mcfvars[mcfvars.length]="1";

/* Fjerner alle noder i et element med id="mcfvhold" ved reset (som ved opstart) */
if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]);
}

function mcfvarrem(tmpn){
tnid=tmpn.replace("mcfvarrem","");
tn=document.getElementById("mcfv"+tnid);
tp=document.getElementById("mcfvhold");
tp.removeChild(tn);
mcfvars[tnid-1]=0;
}

function mcftypeadd(tmpn){
tnid=tmpn.replace("mcftypeadd","");

cnid=document.getElementById("mcfinvarr"+tnid);
cnid.value=+cnid.value+1;

  mcf2b=document.getElementById("mcfv"+tnid+"m");

  mcf2b1=document.createElement("div");
  mcf2b1.className="mcfmtype";
  mcf2b1.setAttribute("id","mcfv"+tnid+"m"+cnid.value);

    mcf2b2a=document.createElement("input");
    mcf2b2a.style.width="200px";
    mcf2b2a.style.marginLeft="20px";
    mcf2b2a.style.marginRight="3px";
    mcf2b2a.title="Indtast navn på typen";
    mcf2b2a.setAttribute("id","v"+tnid+"n"+cnid.value);
    mcf2b2a.onchange=function(){mcfchktype(this.id);}
    mcf2b2a.setAttribute("type","text");
    mcf2b2a.setAttribute("name","v"+tnid+"n"+cnid.value);
   
    mcf2b2a.onfocus=function(){mcfchktype(this.id,2);}

    mcf2b2b=document.createElement("input");
    mcf2b2b.style.width="50px";
    mcf2b2b.style.marginRight="3px";
    mcf2b2b.title="Indtast prisforskel på typen";
    mcf2b2b.onkeyup=function(){mcfchktypev(this,0);}
    mcf2b2b.onfocus=function(){mcfchktype(this.id);}
    mcf2b2b.setAttribute("id","v"+tnid+"p"+cnid.value);
    mcf2b2b.setAttribute("type","text");
    mcf2b2b.setAttribute("name","v"+tnid+"p"+cnid.value);

    mcf2b2c=document.createElement("input");
    mcf2b2c.style.width="50px";
    mcf2b2c.style.marginRight="3px";
    mcf2b2c.title="Indtast vægtforskel på typen";
    mcf2b2c.onchange=function(){mcfchktypev(this,1);}
    mcf2b2c.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c.setAttribute("id","v"+tnid+"v"+cnid.value);
    mcf2b2c.setAttribute("type","text");
    mcf2b2c.setAttribute("name","v"+tnid+"v"+cnid.value);



    mcf2b2c2=document.createElement("input");
    mcf2b2c2.style.width="50px";
    mcf2b2c2.style.marginRight="3px";
    mcf2b2c2.title="Indtast lagerstatus på typen";
    mcf2b2c2.onchange=function(){mcfchktypev(this,2);}
    mcf2b2c2.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c2.setAttribute("id","v"+tnid+"s"+cnid.value);
    mcf2b2c2.setAttribute("type","text");
    mcf2b2c2.setAttribute("name","v"+tnid+"s"+cnid.value);



    mcf2b2d=document.createElement("img");
    mcf2b2d.className="mcfvi";
    mcf2b2d.setAttribute("id","mcftyperem"+tnid+"nr"+cnid.value);
    mcf2b2d.onclick=function(){mcftyperem(this.id);}
    mcf2b2d.setAttribute("src","../_grafik/delete.gif");
    mcf2b2d.setAttribute("alt","Fjern type");



    mcf2b1.appendChild(mcf2b2a);
    mcf2b1.appendChild(mcf2b2b);
    mcf2b1.appendChild(mcf2b2c);
    mcf2b1.appendChild(mcf2b2c2);
    mcf2b1.appendChild(mcf2b2d);

  mcf2b.appendChild(mcf2b1);

}







function mcftyperem(tmpn){
tnid=tmpn.replace("mcftyperem","");
tnid=tnid.split("nr");
tp=document.getElementById("mcfv"+tnid[0]+"m");
if(tp.childNodes.length=="1")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum  have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig.");
else{
  tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]);
  tp.removeChild(tn);
}
}







function mcalc(){
submitok=false;
submitokoverrule=true;
mcft="";

for(i0=0;i0<mcfvars.length;i0++){
  if(mcfvars[i0]!=0){
  mcalctree(+i0+1);
  }
}
document.getElementById("mcalcarr").value=mcft;

if((!submitok)||(!submitokoverrule)){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;}
else return true;
}

function mcalctree(tnid){

mcftmp="";

i=document.getElementById("mcfinvarr"+tnid).value;

tmp=document.getElementById("mcfvm"+tnid).value;
if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("mcfvm"+tnid).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}
chktmp=document.getElementById("mcfvm"+tnid).value;

if(chktmp!=""){
  for(i1=1;i1<=i;i1++){mcftmpadd=false;
  if(document.getElementById("v"+tnid+"n"+i1)){

    tmp=document.getElementById("v"+tnid+"n"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"n"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    chktest="[,]"+document.getElementById("v"+tnid+"n"+i1).value;
    if(chktest!="[,]"){submitok=true;mcftmpadd=true;
    mcftmp=mcftmp+chktest;

    tmp=document.getElementById("v"+tnid+"p"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"p"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"p"+i1).value;

    tmp=document.getElementById("v"+tnid+"v"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"v"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"v"+i1).value;

    tmp=document.getElementById("v"+tnid+"s"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"s"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"s"+i1).value;
    }
  }
  if(mcftmpadd)mcft=mcft+"[;]"+chktmp+mcftmp;
  }
}
}




function mcfchktype(tmpid,chk){
xchk=tmpid;
if((tmpid.indexOf("n")>0)&&(chk==2))tmpid=tmpid.replace(/[n]/gi,"p");

if(tmpid.indexOf("n")<0){
  tmpid=tmpid.replace(/[pvs]/gi,"n");

  tmpid="v"+tmpid.substr(1);
  tn=document.getElementById(tmpid);

  tmpid2="mcfvm"+tmpid.substr(1,1);
  tn2=document.getElementById(tmpid2);

  if(tn2.value.replace(/ * /gi,"")==""){
  if(chk!=0)alert("Udfyld venligst variant navn først");
  tn2.value="";
  document.getElementById(tmpid.replace("n","p")).value="";
  document.getElementById(tmpid.replace("n","v")).value="";
  document.getElementById(tmpid.replace("n","s")).value="";
  tn2.focus();

  }else if((tn.value.replace(/ * /gi,"")=="")&&(xchk!=tn.id)){
  if(chk!=0)alert("Udfyld venligst type navn først");
  tn.value="";
  document.getElementById(tmpid.replace("n","p")).value="";
  document.getElementById(tmpid.replace("n","v")).value="";
  document.getElementById(tmpid.replace("n","s")).value="";
  tn.focus();
  }
}else{
  tn=document.getElementById(tmpid);
  if(tn.value.replace(/ * /gi,"")==""){
  tn1=tn.id.replace("n","p");
  mcfchktype(tn1,0);
  }else{
  if((tn.value.indexOf("[,]")>-1)||(tn.value.indexOf("[;]")>-1)){
    alert("Følgende tegnkombinationer må ikke være i navne feltet:\n[,] og [;] ... , og ; må godt være i feltet\n- bare ikke med [] lige rundt om sig\nDe nævnte tegnkombinationer er blevet fjernet.");
    tn.value=tn.value.replace(/(\[,\])?(\[;\])?/g,"");
  }
  }
}
}

function mcfchktypev(tmpid,chk){
if(chk==0){
  regsearch=tmpid.value.match(/[+-]?\d+(\.\d{2})?/);
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else{
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre og . efterfulgt af to cifre\nf.eks.: +145.21 eller -1.85");
  tmpid.value="";
  }
}else if(chk==1){
  regsearch=tmpid.value.match(/[+-]?\d+/)
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else{
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre\nf.eks.: +145 eller -1");
  tmpid.value="";
  }
}else{
  regsearch=tmpid.value.match(/\d+/)
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else{
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\nIntet fortegn samt x-antal cifre");
  tmpid.value="";
  }
}
}
Avatar billede mclemens Nybegynder
06. maj 2006 - 18:08 #101
[ Hvilke variabler skal jeg manuelt indstille således at den kan bruge disse elementer selvom de ikke er sat med funktionen? ]

... Du tænker på en javascript aktiverings funktion der automatisk kan generere de eksisterende typer / varianter baseret på noget input i denne stil med en window.onload der aktiverer det script?:

<input type="initvartypes" value="[;]Sko[,]123[,]213[,]41[,]123[;]Sko[,]123[,]213[,]41[,]123[,]342[,]5324[,]253[,]253[;]Hat[,]342[,]2345[,]2[,]3425">

^ Og så automatisk beregner varianter kontrol værdier m.v. baseret på feltets value ved onload?
Avatar billede elskermad.dk Nybegynder
06. maj 2006 - 18:12 #102
Super det var det der skulle til ang. valideringen... Hvad så med genskabningen?
Avatar billede mclemens Nybegynder
06. maj 2006 - 18:12 #103
... hov der er da en fejl i den beregning ... den må nok lige rettes først ... den tager åbenbart den tidligere type med i den næste type... ovenstående skulle have været [;]Sko[,]123[,]213[,]41[,]123[,]342[,]5324[,]253[,]253[;]Hat[,]342[,]2345[,]2[,]3425 ... så jeg må nok kigge på den js array sammentæller ...
Avatar billede mclemens Nybegynder
06. maj 2006 - 18:14 #104
[ Super det var det der skulle til ang. valideringen... Hvad så med genskabningen? ]
... Ok, det kigger jeg på senere - tror dog lige jeg skal puffe lidt til det andet javascript array sammentællings problem først?...
Avatar billede elskermad.dk Nybegynder
06. maj 2006 - 18:29 #105
ja har set det med at den tager de forrige type med for hver ny type, men min php-script tager højde for dette så hvis det ikke er til skade for js-scriptet behøves du ikke kigge på det?
Avatar billede elskermad.dk Nybegynder
06. maj 2006 - 18:32 #106
umiddelbart er det ikke nødvendigt med en onload-funktion i js til at skabe elementerne da jeg godt kan udskrive dem med php'en på serverside hvis det er lettere? kan bare ikke helt gennemskue hvordan det skal se ud for at kunne passe ind...
Avatar billede mclemens Nybegynder
06. maj 2006 - 18:33 #107
... hmm ok, her var rettelsen det var bare den 4 nedeste linje der skulle rykkes en tuborg nedaf - det var meget 1 tegn kunne gøre :D


function mcalctree(tnid){

mcftmp="";

i=document.getElementById("mcfinvarr"+tnid).value;

tmp=document.getElementById("mcfvm"+tnid).value;
if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("mcfvm"+tnid).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}
chktmp=document.getElementById("mcfvm"+tnid).value;

if(chktmp!=""){
  for(i1=1;i1<=i;i1++){mcftmpadd=false;
  if(document.getElementById("v"+tnid+"n"+i1)){

    tmp=document.getElementById("v"+tnid+"n"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"n"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    chktest="[,]"+document.getElementById("v"+tnid+"n"+i1).value;
    if(chktest!="[,]"){submitok=true;mcftmpadd=true;
    mcftmp=mcftmp+chktest;

    tmp=document.getElementById("v"+tnid+"p"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"p"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"p"+i1).value;

    tmp=document.getElementById("v"+tnid+"v"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"v"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"v"+i1).value;

    tmp=document.getElementById("v"+tnid+"s"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"s"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"s"+i1).value;
    }
  }
  }
  if(mcftmpadd)mcft=mcft+"[;]"+chktmp+mcftmp;
}
}
Avatar billede mclemens Nybegynder
06. maj 2006 - 18:37 #108
[ umiddelbart er det ikke nødvendigt med en onload-funktion i js til at skabe elementerne da jeg godt kan udskrive dem med php'en på serverside hvis det er lettere? kan bare ikke helt gennemskue hvordan det skal se ud for at kunne passe ind... ]
- Kigger lige på det... p.t. tømmer scriptet jo alt det javascript kræves eller hvad der ellers står i dens div ved onload - det skal så deaktiveres og så skal man outputte html elementerne så de passer ... Jeg lægger lige scriptet over på en anden pc og leger lidt (det går dog ikke helt så hurtigt...)
Avatar billede elskermad.dk Nybegynder
06. maj 2006 - 18:42 #109
Det er skam bare helt i orden :) Super du vil kigge på det igen... Det er ikke sikkert jeg svarer mere i dag, men er online igen imorgen formiddag :) Fortsat god aften...!
Avatar billede mclemens Nybegynder
06. maj 2006 - 18:47 #110
[ Fortsat god aften...! ] ditto :)
Avatar billede mclemens Nybegynder
06. maj 2006 - 20:01 #111
js script:


/* Script til tilføjelse af start holder til variantnoder samt flere variantnoder */
function mcfaddvariant(ctrl){

//if(ctrl=="reset") mcfvars = new Array(); //Deaktiveret !

mcf0=document.getElementById("mcfvhold"); // Forbindelse til stedet indholdet skal indsættes

if(ctrl=="reset"){
  document.getElementById("mcftools").style.display="block";
  document.getElementById("mcfcont2").style.display="block";
  document.forms.opret.onsubmit=function(){return mcalc();};
  mcfxtra0=document.createElement("div");
  mcfxtra0.setAttribute("id","mcfspcx123");
  mcfxtra0.className="mcfspc2";
  mcfxtra0b=document.createTextNode("\u00a0");
  mcfxtra0.appendChild(mcfxtra0b);
  mcf0.appendChild(mcfxtra0);
  document.getElementById("mcalcarr").value="";

}

mcf1=document.createElement("div");
mcf1.className="mcfvar";
mcf1.setAttribute("id","mcfv"+(+mcfvars.length+1));

  mcf2a=document.createElement("div");
  mcf2a.className="mcfvbox";

  mcf2a1a=document.createElement("input");
  mcf2a1a.style.width="200px";
  mcf2a1a.style.marginRight="3px";
  mcf2a1a.title="Indtast navnet på varianten";
  mcf2a1a.setAttribute("id","mcfvm"+(+mcfvars.length+1));
  mcf2a1a.setAttribute("type","text");
  mcf2a1a.setAttribute("name","variant"+(+mcfvars.length+1));

  mcf2a1b=document.createElement("input");
  mcf2a1b.style.marginRight="3px";
  mcf2a1b.onclick=function(){mcftypeadd(this.id);}
  mcf2a1b.setAttribute("id","mcftypeadd"+(+mcfvars.length+1));
  mcf2a1b.setAttribute("name","mcftypeadd"+(+mcfvars.length+1));
  mcf2a1b.setAttribute("type","button");
  mcf2a1b.setAttribute("value","Tilføj type");

  mcf2a1c=document.createElement("input");
  mcf2a1c.onclick=function(){mcfvarrem(this.id);}
  mcf2a1c.setAttribute("id","mcfvarrem"+(+mcfvars.length+1));
  mcf2a1c.setAttribute("name","mcfvarrem"+(+mcfvars.length+1));
  mcf2a1c.setAttribute("type","button");
  mcf2a1c.setAttribute("value","Fjern type");

  mcf2a1d=document.createElement("input");
  mcf2a1d.className="mcfinvarr";
  mcf2a1d.setAttribute("id","mcfinvarr"+(+mcfvars.length+1));
  mcf2a1d.setAttribute("name","mcfinvarr"+(+mcfvars.length+1));
  mcf2a1d.setAttribute("type","hidden");
  mcf2a1d.setAttribute("value",1);

  mcf2a.appendChild(mcf2a1a);mcf2a.appendChild(mcf2a1b);
  mcf2a.appendChild(mcf2a1c);mcf2a.appendChild(mcf2a1d);
  mcf1.appendChild(mcf2a);

  mcf2b=document.createElement("div");
  mcf2b.className="mcfminn";
  mcf2b.setAttribute("id","mcfv"+(+mcfvars.length+1)+"m");

  mcf2b1=document.createElement("div");
  mcf2b1.className="mcfmtype";
  mcf2b1.setAttribute("id","mcfv"+(+mcfvars.length+1)+"m1");

    mcf2b2a=document.createElement("input");
    mcf2b2a.style.width="200px";
    mcf2b2a.style.marginLeft="20px";
    mcf2b2a.style.marginRight="3px";
    mcf2b2a.title="Indtast navnet på typen";
    mcf2b2a.onkeyup=function(){mcfchktype(this.id);}
    mcf2b2a.setAttribute("id","v"+(+mcfvars.length+1)+"n1");
    mcf2b2a.setAttribute("type","text");
    mcf2b2a.setAttribute("name","v"+(+mcfvars.length+1)+"n1");
   
    mcf2b2a.onfocus=function(){mcfchktype(this.id,2);}

    mcf2b2b=document.createElement("input");
    mcf2b2b.style.width="50px";
    mcf2b2b.style.marginRight="3px";
    mcf2b2b.title="Indtast prisforskel på typen";
    mcf2b2b.onchange=function(){mcfchktypev(this,0);}
    mcf2b2b.onfocus=function(){mcfchktype(this.id);}
    mcf2b2b.setAttribute("id","v"+(+mcfvars.length+1)+"p1");
    mcf2b2b.setAttribute("type","text");
    mcf2b2b.setAttribute("name","v"+(+mcfvars.length+1)+"p1");

    mcf2b2c=document.createElement("input");
    mcf2b2c.style.width="50px";
    mcf2b2c.style.marginRight="3px";
    mcf2b2c.title="Indtast vægtforskel på typen";
    mcf2b2c.onchange=function(){mcfchktypev(this,1);}
    mcf2b2c.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c.setAttribute("id","v"+(+mcfvars.length+1)+"v1");
    mcf2b2c.setAttribute("type","text");
    mcf2b2c.setAttribute("name","v"+(+mcfvars.length+1)+"v1");

    mcf2b2c2=document.createElement("input");
    mcf2b2c2.style.width="50px";
    mcf2b2c2.style.marginRight="3px";
    mcf2b2c2.title="Indtast lagerstatus på typen";
    mcf2b2c2.onchange=function(){mcfchktypev(this,2);}
    mcf2b2c2.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c2.setAttribute("id","v"+(+mcfvars.length+1)+"s1");
    mcf2b2c2.setAttribute("type","text");
    mcf2b2c2.setAttribute("name","v"+(+mcfvars.length+1)+"s1");




    mcf2b2d=document.createElement("img");
    mcf2b2d.className="mcfvi";
    mcf2b2d.setAttribute("id","mcftyperem"+(+mcfvars.length+1)+"nr1");
    mcf2b2d.onclick=function(){mcftyperem(this.id);}
    mcf2b2d.setAttribute("src","../_grafik/delete.gif");
    mcf2b2d.setAttribute("alt","Fjern type");




    mcf2b1.appendChild(mcf2b2a);
    mcf2b1.appendChild(mcf2b2b);
    mcf2b1.appendChild(mcf2b2c);
    mcf2b1.appendChild(mcf2b2c2);
    mcf2b1.appendChild(mcf2b2d);



  mcf2b.appendChild(mcf2b1);

  mcf1.appendChild(mcf2b);

mcf0.appendChild(mcf1);

mcfvars[mcfvars.length]="1";

/* Fjerner alle noder i et element med id="mcfvhold" ved reset (som ved opstart) */
if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]);
}

function mcfvarrem(tmpn){
tnid=tmpn.replace("mcfvarrem","");
tn=document.getElementById("mcfv"+tnid);
tp=document.getElementById("mcfvhold");
tp.removeChild(tn);
mcfvars[tnid-1]=0;
}

function mcftypeadd(tmpn){
tnid=tmpn.replace("mcftypeadd","");

cnid=document.getElementById("mcfinvarr"+tnid);
cnid.value=+cnid.value+1;

  mcf2b=document.getElementById("mcfv"+tnid+"m");

  mcf2b1=document.createElement("div");
  mcf2b1.className="mcfmtype";
  mcf2b1.setAttribute("id","mcfv"+tnid+"m"+cnid.value);

    mcf2b2a=document.createElement("input");
    mcf2b2a.style.width="200px";
    mcf2b2a.style.marginLeft="20px";
    mcf2b2a.style.marginRight="3px";
    mcf2b2a.title="Indtast navn på typen";
    mcf2b2a.setAttribute("id","v"+tnid+"n"+cnid.value);
    mcf2b2a.onchange=function(){mcfchktype(this.id);}
    mcf2b2a.setAttribute("type","text");
    mcf2b2a.setAttribute("name","v"+tnid+"n"+cnid.value);
   
    mcf2b2a.onfocus=function(){mcfchktype(this.id,2);}

    mcf2b2b=document.createElement("input");
    mcf2b2b.style.width="50px";
    mcf2b2b.style.marginRight="3px";
    mcf2b2b.title="Indtast prisforskel på typen";
    mcf2b2b.onkeyup=function(){mcfchktypev(this,0);}
    mcf2b2b.onfocus=function(){mcfchktype(this.id);}
    mcf2b2b.setAttribute("id","v"+tnid+"p"+cnid.value);
    mcf2b2b.setAttribute("type","text");
    mcf2b2b.setAttribute("name","v"+tnid+"p"+cnid.value);

    mcf2b2c=document.createElement("input");
    mcf2b2c.style.width="50px";
    mcf2b2c.style.marginRight="3px";
    mcf2b2c.title="Indtast vægtforskel på typen";
    mcf2b2c.onchange=function(){mcfchktypev(this,1);}
    mcf2b2c.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c.setAttribute("id","v"+tnid+"v"+cnid.value);
    mcf2b2c.setAttribute("type","text");
    mcf2b2c.setAttribute("name","v"+tnid+"v"+cnid.value);



    mcf2b2c2=document.createElement("input");
    mcf2b2c2.style.width="50px";
    mcf2b2c2.style.marginRight="3px";
    mcf2b2c2.title="Indtast lagerstatus på typen";
    mcf2b2c2.onchange=function(){mcfchktypev(this,2);}
    mcf2b2c2.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c2.setAttribute("id","v"+tnid+"s"+cnid.value);
    mcf2b2c2.setAttribute("type","text");
    mcf2b2c2.setAttribute("name","v"+tnid+"s"+cnid.value);



    mcf2b2d=document.createElement("img");
    mcf2b2d.className="mcfvi";
    mcf2b2d.setAttribute("id","mcftyperem"+tnid+"nr"+cnid.value);
    mcf2b2d.onclick=function(){mcftyperem(this.id);}
    mcf2b2d.setAttribute("src","../_grafik/delete.gif");
    mcf2b2d.setAttribute("alt","Fjern type");



    mcf2b1.appendChild(mcf2b2a);
    mcf2b1.appendChild(mcf2b2b);
    mcf2b1.appendChild(mcf2b2c);
    mcf2b1.appendChild(mcf2b2c2);
    mcf2b1.appendChild(mcf2b2d);

  mcf2b.appendChild(mcf2b1);

}







function mcftyperem(tmpn){
tnid=tmpn.replace("mcftyperem","");
tnid=tnid.split("nr");
tp=document.getElementById("mcfv"+tnid[0]+"m");
if(tp.childNodes.length=="1")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum  have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig.");
else{
  tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]);
  tp.removeChild(tn);
}
}







function mcalc(){
submitok=false;
submitokoverrule=true;
mcft="";

for(i0=0;i0<mcfvars.length;i0++){
  if(mcfvars[i0]!=0){
  mcalctree(+i0+1);
  }
}
document.getElementById("mcalcarr").value=mcft;

document.write(document.getElementById("mcalcarr").value);

if((!submitok)||(!submitokoverrule)){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;}
else return true;
}

function mcalctree(tnid){

mcftmp="";

i=document.getElementById("mcfinvarr"+tnid).value;

tmp=document.getElementById("mcfvm"+tnid).value;
if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("mcfvm"+tnid).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}
chktmp=document.getElementById("mcfvm"+tnid).value;

if(chktmp!=""){
  for(i1=1;i1<=i;i1++){mcftmpadd=false;
  if(document.getElementById("v"+tnid+"n"+i1)){

    tmp=document.getElementById("v"+tnid+"n"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"n"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    chktest="[,]"+document.getElementById("v"+tnid+"n"+i1).value;
    if(chktest!="[,]"){submitok=true;mcftmpadd=true;
    mcftmp=mcftmp+chktest;

    tmp=document.getElementById("v"+tnid+"p"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"p"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"p"+i1).value;

    tmp=document.getElementById("v"+tnid+"v"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"v"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"v"+i1).value;

    tmp=document.getElementById("v"+tnid+"s"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"s"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"s"+i1).value;
    }
  }
  }
  if(mcftmpadd)mcft=mcft+"[;]"+chktmp+mcftmp;
}
}




function mcfchktype(tmpid,chk){
xchk=tmpid;
if((tmpid.indexOf("n")>0)&&(chk==2))tmpid=tmpid.replace(/[n]/gi,"p");

if(tmpid.indexOf("n")<0){
  tmpid=tmpid.replace(/[pvs]/gi,"n");

  tmpid="v"+tmpid.substr(1);
  tn=document.getElementById(tmpid);

  tmpid2="mcfvm"+tmpid.substr(1,1);
  tn2=document.getElementById(tmpid2);

  if(tn2.value.replace(/ * /gi,"")==""){
  if(chk!=0)alert("Udfyld venligst variant navn først");
  tn2.value="";
  document.getElementById(tmpid.replace("n","p")).value="";
  document.getElementById(tmpid.replace("n","v")).value="";
  document.getElementById(tmpid.replace("n","s")).value="";
  tn2.focus();

  }else if((tn.value.replace(/ * /gi,"")=="")&&(xchk!=tn.id)){
  if(chk!=0)alert("Udfyld venligst type navn først");
  tn.value="";
  document.getElementById(tmpid.replace("n","p")).value="";
  document.getElementById(tmpid.replace("n","v")).value="";
  document.getElementById(tmpid.replace("n","s")).value="";
  tn.focus();
  }
}else{
  tn=document.getElementById(tmpid);
  if(tn.value.replace(/ * /gi,"")==""){
  tn1=tn.id.replace("n","p");
  mcfchktype(tn1,0);
  }else{
  if((tn.value.indexOf("[,]")>-1)||(tn.value.indexOf("[;]")>-1)){
    alert("Følgende tegnkombinationer må ikke være i navne feltet:\n[,] og [;] ... , og ; må godt være i feltet\n- bare ikke med [] lige rundt om sig\nDe nævnte tegnkombinationer er blevet fjernet.");
    tn.value=tn.value.replace(/(\[,\])?(\[;\])?/g,"");
  }
  }
}
}

function mcfchktypev(tmpid,chk){
if(chk==0){
  regsearch=tmpid.value.match(/[+-]?\d+(\.\d{2})?/);
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else if(tmpid.value!=""){
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre og . efterfulgt af to cifre\nf.eks.: +145.21 eller -1.85");
  tmpid.value="";
  }
}else if(chk==1){
  regsearch=tmpid.value.match(/[+-]?\d+/)
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else if(tmpid.value!=""){
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre\nf.eks.: +145 eller -1");
  tmpid.value="";
  }
}else{
  regsearch=tmpid.value.match(/\d+/)
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else if(tmpid.value!=""){
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\nIntet fortegn samt x-antal cifre");
  tmpid.value="";
  }
}
}
Avatar billede mclemens Nybegynder
06. maj 2006 - 20:03 #112
...
                <div id="mcfvhold">



<div class=mcfvar id=mcfv1>
    <div class=mcfvbox>
        <input id=mcfvm1 title="Indtast navnet på varianten" style="width: 200px; margin-right: 3px" value="Hvid">
        <input id=mcftypeadd1 style="margin-right: 3px" type=button value="Tilføj type" onclick="mcftypeadd(this.id);">
        <input id=mcfvarrem1 type=button value="Fjern type" onclick="mcfvarrem(this.id);">
        <input class=mcfinvarr id=mcfinvarr1 type=hidden value=3>
    </div>

    <div class="mcfminn" id="mcfv1m">


        <div class="mcfmtype" id="mcfv1m1"><input id="v1n1" title="Indtast navnet på typen" style="margin-left: 20px; width: 200px; margin-right: 3px" value="Small" onkeyup="mcfchktype(this.id);" onfocus="mcfchktype(this.id,2);">


<input id="v1p1" title="Indtast prisforskel på typen" style="width: 50px; margin-right: 3px" value="12" onchange="mcfchktypev(this,0);" onfocus="mcfchktype(this.id);">


<input id="v1v1" title="Indtast vægtforskel på typen" style="width: 50px; margin-right: 3px" value="10" onchange="mcfchktypev(this,1);" onfocus="mcfchktype(this.id);">

<input id=v1s1 title="Indtast lagerstatus på typen" style="width: 50px; margin-right: 3px" value="5"onchange="mcfchktypev(this,2);" onfocus="mcfchktype(this.id);"><img class="mcfvi" id="mcftyperem1nr1" height="30" alt="Fjern type" src="../_grafik/delete.gif" width="28" onclick="mcftyperem(this.id);"></div>





        <div class="mcfmtype" id="mcfv1m2"><input id="v1n2" title="Indtast navnet på typen" style="margin-left: 20px; width: 200px; margin-right: 3px" value="Medium" onkeyup="mcfchktype(this.id);" onfocus="mcfchktype(this.id,2);">


<input id="v1p2" title="Indtast prisforskel på typen" style="width: 50px; margin-right: 3px" value="10" onchange="mcfchktypev(this,0);" onfocus="mcfchktype(this.id);">

<input id="v1v2" title="Indtast vægtforskel på typen" style="width: 50px; margin-right: 3px" value="1" onchange="mcfchktypev(this,1);" onfocus="mcfchktype(this.id);">

<input id=v1s2 title="Indtast lagerstatus på typen" style="width: 50px; margin-right: 3px" value="5"onchange="mcfchktypev(this,2);" onfocus="mcfchktype(this.id);"><img class="mcfvi" id="mcftyperem1nr2" height="30" alt="Fjern type" src="../_grafik/delete.gif" width="28" onclick="mcftyperem(this.id);"></div>





        <div class="mcfmtype" id="mcfv1m3"><input id="v1n3" title="Indtast navnet på typen" style="margin-left: 20px; width: 200px; margin-right: 3px" value="Large" onkeyup="mcfchktype(this.id);" onfocus="mcfchktype(this.id,2);">

<input id="v1p3" title="Indtast prisforskel på typen" style="width: 50px; margin-right: 3px" value="15" onchange="mcfchktypev(this,0);" onfocus="mcfchktype(this.id);">

<input id="v1v3" title="Indtast vægtforskel på typen" style="width: 50px; margin-right: 3px" value="5" onchange="mcfchktypev(this,1);" onfocus="mcfchktype(this.id);">

<input id=v1s3 title="Indtast lagerstatus på typen" style="width: 50px; margin-right: 3px" value="3"onchange="mcfchktypev(this,2);" onfocus="mcfchktype(this.id);"><img class="mcfvi" id="mcftyperem1nr3" height="30" alt="Fjern type" src="../_grafik/delete.gif" width="28" onclick="mcftyperem(this.id);"></div>
    </div>
</div>



</div>


<script language="javascript" type="text/javascript">

//mcfvars=new Array(); // <- Ikke nødvendig... kun hvis det er en "tom" variant/nyt produkt
mcfvars=new Array("1","1"); // <- til ,"1" for hver variant (i dette eksempel er der to da der er to varianter fra start af...

    tnid = 3;
    cnid = 3;
</script>
...
Avatar billede mclemens Nybegynder
06. maj 2006 - 20:13 #113
^ Bemærk i ovenstående har jeg lige kastet et array ind i scriptet lige under og fjernet den fra den fra scriptet jeg postede ovenover....

mcfvars=new Array("1","1"); skal sættes af dit server script til:
mcfvars=new Array(); <- ved 0 eksisterende varianter (den viste der er deaktiveret)
mcfvars=new Array("1"); <- ved 1 eksisterende variant
... o.s.v. ...


... opskriften på en variant (ved denne fremgangsmåde) med herunderliggende typer er:

kontrol starten:

<div class=mcfvar id=mcfv1> <- hvor 1 hentyper til variant nummeret
    <div class=mcfvbox>
        <input id=mcfvm1 title="Indtast navnet på varianten" style="width: 200px; margin-right: 3px" value="Hvid">
^ - 1 i id hentyder variantnr. ... value er navnet til varianten...


        <input id=mcftypeadd1 style="margin-right: 3px" type=button value="Tilføj type" onclick="mcftypeadd(this.id);">
^ - 1 i id hentyder variantnr.

        <input id=mcfvarrem1 type=button value="Fjern type" onclick="mcfvarrem(this.id);">
^ - 1 i id hentyder variantnr.

        <input class=mcfinvarr id=mcfinvarr1 type=hidden value=3>
^ - 3 i value (skjult felt) hentyder antallet af underliggende typer

    </div>

<div class="mcfminn" id="mcfv1m">
^ 1 hentyder til variant nr. dette er type holderen ... der skal ikke være 1 for hver type kun en pr. variant

... og typer

<div class="mcfmtype" id="mcfv1m1">
^ (den første) 1 hentyder til varianten ... (den anden) 1 hentyder til typens nr.

<input id="v1n1" title="Indtast navnet på typen" style="margin-left: 20px; width: 200px; margin-right: 3px" value="Small" onkeyup="mcfchktype(this.id);" onfocus="mcfchktype(this.id,2);">
^ (den første) 1 hentyder til varianten ... (den anden) 1 hentyder til typens nr.


<input id="v1p1" title="Indtast prisforskel på typen" style="width: 50px; margin-right: 3px" value="12" onchange="mcfchktypev(this,0);" onfocus="mcfchktype(this.id);">
^ (den første) 1 hentyder til varianten ... (den anden) 1 hentyder til typens nr.

<input id="v1v1" title="Indtast vægtforskel på typen" style="width: 50px; margin-right: 3px" value="10" onchange="mcfchktypev(this,1);" onfocus="mcfchktype(this.id);">
^ (den første) 1 hentyder til varianten ... (den anden) 1 hentyder til typens nr.

<input id=v1s1 title="Indtast lagerstatus på typen" style="width: 50px; margin-right: 3px" value="5"onchange="mcfchktypev(this,2);" onfocus="mcfchktype(this.id);">
^ (den første) 1 hentyder til varianten ... (den anden) 1 hentyder til typens nr.

<img class="mcfvi" id="mcftyperem1nr1" height="30" alt="Fjern type" src="../_grafik/delete.gif" width="28" onclick="mcftyperem(this.id);"></div>
^ (den første) 1 hentyder til varianten ... (den anden) 1 hentyder til typens nr.



... Forklaringen blev nok lidt for uddybet :/
Avatar billede mclemens Nybegynder
06. maj 2006 - 20:19 #114
06/05-2006 20:03:23 <- hvis det ikke ser pænt ud (ikke står på linje når du indsætter det) så skal html-linjerne lige samles en linje så der ikke lægges mellemrum ind mellem inputs ... ombrudte den for bedre overskuelighed...
Avatar billede mclemens Nybegynder
06. maj 2006 - 21:27 #115
tager lige javascriptet igen ( der var en document.write der ikke skulle være der ... det var til test af array sammentællingen ...)


/* Script til tilføjelse af start holder til variantnoder samt flere variantnoder */
function mcfaddvariant(ctrl){

//if(ctrl=="reset") mcfvars = new Array(); //Deaktiveret !

mcf0=document.getElementById("mcfvhold"); // Forbindelse til stedet indholdet skal indsættes

if(ctrl=="reset"){
  document.getElementById("mcftools").style.display="block";
  document.getElementById("mcfcont2").style.display="block";
  document.forms.opret.onsubmit=function(){return mcalc();};
  mcfxtra0=document.createElement("div");
  mcfxtra0.setAttribute("id","mcfspcx123");
  mcfxtra0.className="mcfspc2";
  mcfxtra0b=document.createTextNode("\u00a0");
  mcfxtra0.appendChild(mcfxtra0b);
  mcf0.appendChild(mcfxtra0);
  document.getElementById("mcalcarr").value="";

}

mcf1=document.createElement("div");
mcf1.className="mcfvar";
mcf1.setAttribute("id","mcfv"+(+mcfvars.length+1));

  mcf2a=document.createElement("div");
  mcf2a.className="mcfvbox";

  mcf2a1a=document.createElement("input");
  mcf2a1a.style.width="200px";
  mcf2a1a.style.marginRight="3px";
  mcf2a1a.title="Indtast navnet på varianten";
  mcf2a1a.setAttribute("id","mcfvm"+(+mcfvars.length+1));
  mcf2a1a.setAttribute("type","text");
  mcf2a1a.setAttribute("name","variant"+(+mcfvars.length+1));

  mcf2a1b=document.createElement("input");
  mcf2a1b.style.marginRight="3px";
  mcf2a1b.onclick=function(){mcftypeadd(this.id);}
  mcf2a1b.setAttribute("id","mcftypeadd"+(+mcfvars.length+1));
  mcf2a1b.setAttribute("name","mcftypeadd"+(+mcfvars.length+1));
  mcf2a1b.setAttribute("type","button");
  mcf2a1b.setAttribute("value","Tilføj type");

  mcf2a1c=document.createElement("input");
  mcf2a1c.onclick=function(){mcfvarrem(this.id);}
  mcf2a1c.setAttribute("id","mcfvarrem"+(+mcfvars.length+1));
  mcf2a1c.setAttribute("name","mcfvarrem"+(+mcfvars.length+1));
  mcf2a1c.setAttribute("type","button");
  mcf2a1c.setAttribute("value","Fjern type");

  mcf2a1d=document.createElement("input");
  mcf2a1d.className="mcfinvarr";
  mcf2a1d.setAttribute("id","mcfinvarr"+(+mcfvars.length+1));
  mcf2a1d.setAttribute("name","mcfinvarr"+(+mcfvars.length+1));
  mcf2a1d.setAttribute("type","hidden");
  mcf2a1d.setAttribute("value",1);

  mcf2a.appendChild(mcf2a1a);mcf2a.appendChild(mcf2a1b);
  mcf2a.appendChild(mcf2a1c);mcf2a.appendChild(mcf2a1d);
  mcf1.appendChild(mcf2a);

  mcf2b=document.createElement("div");
  mcf2b.className="mcfminn";
  mcf2b.setAttribute("id","mcfv"+(+mcfvars.length+1)+"m");

  mcf2b1=document.createElement("div");
  mcf2b1.className="mcfmtype";
  mcf2b1.setAttribute("id","mcfv"+(+mcfvars.length+1)+"m1");

    mcf2b2a=document.createElement("input");
    mcf2b2a.style.width="200px";
    mcf2b2a.style.marginLeft="20px";
    mcf2b2a.style.marginRight="3px";
    mcf2b2a.title="Indtast navnet på typen";
    mcf2b2a.onkeyup=function(){mcfchktype(this.id);}
    mcf2b2a.setAttribute("id","v"+(+mcfvars.length+1)+"n1");
    mcf2b2a.setAttribute("type","text");
    mcf2b2a.setAttribute("name","v"+(+mcfvars.length+1)+"n1");
 
    mcf2b2a.onfocus=function(){mcfchktype(this.id,2);}

    mcf2b2b=document.createElement("input");
    mcf2b2b.style.width="50px";
    mcf2b2b.style.marginRight="3px";
    mcf2b2b.title="Indtast prisforskel på typen";
    mcf2b2b.onchange=function(){mcfchktypev(this,0);}
    mcf2b2b.onfocus=function(){mcfchktype(this.id);}
    mcf2b2b.setAttribute("id","v"+(+mcfvars.length+1)+"p1");
    mcf2b2b.setAttribute("type","text");
    mcf2b2b.setAttribute("name","v"+(+mcfvars.length+1)+"p1");

    mcf2b2c=document.createElement("input");
    mcf2b2c.style.width="50px";
    mcf2b2c.style.marginRight="3px";
    mcf2b2c.title="Indtast vægtforskel på typen";
    mcf2b2c.onchange=function(){mcfchktypev(this,1);}
    mcf2b2c.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c.setAttribute("id","v"+(+mcfvars.length+1)+"v1");
    mcf2b2c.setAttribute("type","text");
    mcf2b2c.setAttribute("name","v"+(+mcfvars.length+1)+"v1");

    mcf2b2c2=document.createElement("input");
    mcf2b2c2.style.width="50px";
    mcf2b2c2.style.marginRight="3px";
    mcf2b2c2.title="Indtast lagerstatus på typen";
    mcf2b2c2.onchange=function(){mcfchktypev(this,2);}
    mcf2b2c2.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c2.setAttribute("id","v"+(+mcfvars.length+1)+"s1");
    mcf2b2c2.setAttribute("type","text");
    mcf2b2c2.setAttribute("name","v"+(+mcfvars.length+1)+"s1");




    mcf2b2d=document.createElement("img");
    mcf2b2d.className="mcfvi";
    mcf2b2d.setAttribute("id","mcftyperem"+(+mcfvars.length+1)+"nr1");
    mcf2b2d.onclick=function(){mcftyperem(this.id);}
    mcf2b2d.setAttribute("src","../_grafik/delete.gif");
    mcf2b2d.setAttribute("alt","Fjern type");




    mcf2b1.appendChild(mcf2b2a);
    mcf2b1.appendChild(mcf2b2b);
    mcf2b1.appendChild(mcf2b2c);
    mcf2b1.appendChild(mcf2b2c2);
    mcf2b1.appendChild(mcf2b2d);



  mcf2b.appendChild(mcf2b1);

  mcf1.appendChild(mcf2b);

mcf0.appendChild(mcf1);

mcfvars[mcfvars.length]="1";

/* Fjerner alle noder i et element med id="mcfvhold" ved reset (som ved opstart) */
if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]);
}

function mcfvarrem(tmpn){
tnid=tmpn.replace("mcfvarrem","");
tn=document.getElementById("mcfv"+tnid);
tp=document.getElementById("mcfvhold");
tp.removeChild(tn);
mcfvars[tnid-1]=0;
}

function mcftypeadd(tmpn){
tnid=tmpn.replace("mcftypeadd","");

cnid=document.getElementById("mcfinvarr"+tnid);
cnid.value=+cnid.value+1;

  mcf2b=document.getElementById("mcfv"+tnid+"m");

  mcf2b1=document.createElement("div");
  mcf2b1.className="mcfmtype";
  mcf2b1.setAttribute("id","mcfv"+tnid+"m"+cnid.value);

    mcf2b2a=document.createElement("input");
    mcf2b2a.style.width="200px";
    mcf2b2a.style.marginLeft="20px";
    mcf2b2a.style.marginRight="3px";
    mcf2b2a.title="Indtast navn på typen";
    mcf2b2a.setAttribute("id","v"+tnid+"n"+cnid.value);
    mcf2b2a.onchange=function(){mcfchktype(this.id);}
    mcf2b2a.setAttribute("type","text");
    mcf2b2a.setAttribute("name","v"+tnid+"n"+cnid.value);
 
    mcf2b2a.onfocus=function(){mcfchktype(this.id,2);}

    mcf2b2b=document.createElement("input");
    mcf2b2b.style.width="50px";
    mcf2b2b.style.marginRight="3px";
    mcf2b2b.title="Indtast prisforskel på typen";
    mcf2b2b.onkeyup=function(){mcfchktypev(this,0);}
    mcf2b2b.onfocus=function(){mcfchktype(this.id);}
    mcf2b2b.setAttribute("id","v"+tnid+"p"+cnid.value);
    mcf2b2b.setAttribute("type","text");
    mcf2b2b.setAttribute("name","v"+tnid+"p"+cnid.value);

    mcf2b2c=document.createElement("input");
    mcf2b2c.style.width="50px";
    mcf2b2c.style.marginRight="3px";
    mcf2b2c.title="Indtast vægtforskel på typen";
    mcf2b2c.onchange=function(){mcfchktypev(this,1);}
    mcf2b2c.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c.setAttribute("id","v"+tnid+"v"+cnid.value);
    mcf2b2c.setAttribute("type","text");
    mcf2b2c.setAttribute("name","v"+tnid+"v"+cnid.value);



    mcf2b2c2=document.createElement("input");
    mcf2b2c2.style.width="50px";
    mcf2b2c2.style.marginRight="3px";
    mcf2b2c2.title="Indtast lagerstatus på typen";
    mcf2b2c2.onchange=function(){mcfchktypev(this,2);}
    mcf2b2c2.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c2.setAttribute("id","v"+tnid+"s"+cnid.value);
    mcf2b2c2.setAttribute("type","text");
    mcf2b2c2.setAttribute("name","v"+tnid+"s"+cnid.value);



    mcf2b2d=document.createElement("img");
    mcf2b2d.className="mcfvi";
    mcf2b2d.setAttribute("id","mcftyperem"+tnid+"nr"+cnid.value);
    mcf2b2d.onclick=function(){mcftyperem(this.id);}
    mcf2b2d.setAttribute("src","../_grafik/delete.gif");
    mcf2b2d.setAttribute("alt","Fjern type");



    mcf2b1.appendChild(mcf2b2a);
    mcf2b1.appendChild(mcf2b2b);
    mcf2b1.appendChild(mcf2b2c);
    mcf2b1.appendChild(mcf2b2c2);
    mcf2b1.appendChild(mcf2b2d);

  mcf2b.appendChild(mcf2b1);

}







function mcftyperem(tmpn){
tnid=tmpn.replace("mcftyperem","");
tnid=tnid.split("nr");
tp=document.getElementById("mcfv"+tnid[0]+"m");
if(tp.childNodes.length=="1")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum  have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig.");
else{
  tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]);
  tp.removeChild(tn);
}
}







function mcalc(){
submitok=false;
submitokoverrule=true;
mcft="";

for(i0=0;i0<mcfvars.length;i0++){
  if(mcfvars[i0]!=0){
  mcalctree(+i0+1);
  }
}
document.getElementById("mcalcarr").value=mcft;

if((!submitok)||(!submitokoverrule)){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;}
else return true;
}

function mcalctree(tnid){

mcftmp="";

i=document.getElementById("mcfinvarr"+tnid).value;

tmp=document.getElementById("mcfvm"+tnid).value;
if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("mcfvm"+tnid).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}
chktmp=document.getElementById("mcfvm"+tnid).value;

if(chktmp!=""){
  for(i1=1;i1<=i;i1++){mcftmpadd=false;
  if(document.getElementById("v"+tnid+"n"+i1)){

    tmp=document.getElementById("v"+tnid+"n"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"n"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    chktest="[,]"+document.getElementById("v"+tnid+"n"+i1).value;
    if(chktest!="[,]"){submitok=true;mcftmpadd=true;
    mcftmp=mcftmp+chktest;

    tmp=document.getElementById("v"+tnid+"p"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"p"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"p"+i1).value;

    tmp=document.getElementById("v"+tnid+"v"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"v"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"v"+i1).value;

    tmp=document.getElementById("v"+tnid+"s"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"s"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"s"+i1).value;
    }
  }
  }
  if(mcftmpadd)mcft=mcft+"[;]"+chktmp+mcftmp;
}
}




function mcfchktype(tmpid,chk){
xchk=tmpid;
if((tmpid.indexOf("n")>0)&&(chk==2))tmpid=tmpid.replace(/[n]/gi,"p");

if(tmpid.indexOf("n")<0){
  tmpid=tmpid.replace(/[pvs]/gi,"n");

  tmpid="v"+tmpid.substr(1);
  tn=document.getElementById(tmpid);

  tmpid2="mcfvm"+tmpid.substr(1,1);
  tn2=document.getElementById(tmpid2);

  if(tn2.value.replace(/ * /gi,"")==""){
  if(chk!=0)alert("Udfyld venligst variant navn først");
  tn2.value="";
  document.getElementById(tmpid.replace("n","p")).value="";
  document.getElementById(tmpid.replace("n","v")).value="";
  document.getElementById(tmpid.replace("n","s")).value="";
  tn2.focus();

  }else if((tn.value.replace(/ * /gi,"")=="")&&(xchk!=tn.id)){
  if(chk!=0)alert("Udfyld venligst type navn først");
  tn.value="";
  document.getElementById(tmpid.replace("n","p")).value="";
  document.getElementById(tmpid.replace("n","v")).value="";
  document.getElementById(tmpid.replace("n","s")).value="";
  tn.focus();
  }
}else{
  tn=document.getElementById(tmpid);
  if(tn.value.replace(/ * /gi,"")==""){
  tn1=tn.id.replace("n","p");
  mcfchktype(tn1,0);
  }else{
  if((tn.value.indexOf("[,]")>-1)||(tn.value.indexOf("[;]")>-1)){
    alert("Følgende tegnkombinationer må ikke være i navne feltet:\n[,] og [;] ... , og ; må godt være i feltet\n- bare ikke med [] lige rundt om sig\nDe nævnte tegnkombinationer er blevet fjernet.");
    tn.value=tn.value.replace(/(\[,\])?(\[;\])?/g,"");
  }
  }
}
}

function mcfchktypev(tmpid,chk){
if(chk==0){
  regsearch=tmpid.value.match(/[+-]?\d+(\.\d{2})?/);
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else if(tmpid.value!=""){
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre og . efterfulgt af to cifre\nf.eks.: +145.21 eller -1.85");
  tmpid.value="";
  }
}else if(chk==1){
  regsearch=tmpid.value.match(/[+-]?\d+/)
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else if(tmpid.value!=""){
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre\nf.eks.: +145 eller -1");
  tmpid.value="";
  }
}else{
  regsearch=tmpid.value.match(/\d+/)
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else if(tmpid.value!=""){
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\nIntet fortegn samt x-antal cifre");
  tmpid.value="";
  }
}
}
Avatar billede mclemens Nybegynder
06. maj 2006 - 23:25 #116
Næste eksempel javascript laver lidt mere af arbejdet:

Hoveddokumente ... pillet ved den onload...


<script language="javascript" type="text/javascript" src="123_files/modeller.js"></script>
<script language="javascript" type="text/javascript">
    function tjek(f) {
        mcalc();
       
        if (f.navn.value == '') {
            alert('Du skal angive et navn til produktet');
            f.navn.focus();
            return false
        }
       
        return true
    }
   
    function aktivtid(mode) {
        if (mode == 'tid') {
            document.getElementById('aktiv_tid').style.display = 'block';
            document.opret.aktiv_tid_start.select();
        }
        else {
            document.getElementById('aktiv_tid').style.display = 'none';
        }
    }
   
    function nyhedtid(mode) {
        if (mode == 'tid') {
            document.getElementById('nyhed_tid').style.display = 'block';
            document.opret.nyhed_tid_slut.select();
        }
        else {
            document.getElementById('nyhed_tid').style.display = 'none';
        }
    }
   
    function fragtgebyr(mode) {
        if (mode == 'ja') {
            document.getElementById('fragt_gebyr').style.display = 'block';
            document.opret.fragt_gebyr.value = '';
            document.opret.fragt_gebyr.select();
        }
        else {
            document.getElementById('fragt_gebyr').style.display = 'none';
        }
    }
   
    var act_eksisterende= 1;
   
    function billede_add_eksisterende() {
        var placering        = document.getElementById('eksisterende');
        var div                = document.getElementById('skabelon_eksisterende').cloneNode(true);
        div.id                = div.id + '_' + (++act_eksisterende);
       
        var bokse            = div.getElementsByTagName('select');
       
        for(i=0;bokse.length>i;i++) {
            bokse[i].id        = bokse[i].id.replace('[1]','[' + act_eksisterende + ']');
            bokse[i].name    = bokse[i].name.replace('[1]','[' + act_eksisterende + ']');
        }
       
        var funk            = div.getElementsByTagName('a');
       
        for(i=0;funk.length>i;i++) {
            funk[i].onclick    = 'imagesbrowser(document.getElementById("billede_browse[' + act_eksisterende + ']").value,"billede_browse[' + act_eksisterende + ']");return false';
        }
       
        placering.appendChild(div);
    }
   
    var act_opload        = 1;
   
    function billede_add_opload() {
        var placering    = document.getElementById('opload');
        var div            = document.getElementById('skabelon_opload').cloneNode(true);
        div.id            = div.id + '_' + (++act_opload);
       
        var bokse        = div.getElementsByTagName('input');
       
        for(i=0;bokse.length>i;i++) {
            bokse[i].name    = bokse[i].name.replace('[1]','[' + act_opload + ']');
        }
       
        placering.appendChild(div);
    }
   
    var act_rabat        = 1;
   
    function rabat_add() {
        var placering    = document.getElementById('rabat');
        var div            = document.getElementById('skabelon_rabat').cloneNode(true);
        div.id            = div.id + '_' + (++act_rabat);
       
        var bokse        = div.getElementsByTagName('input');
       
        for(i=0;bokse.length>i;i++) {
            bokse[i].name    = bokse[i].name.replace('[1]','[' + act_rabat + ']');
            bokse[i].value    = '';
        }
       
        var bokse        = div.getElementsByTagName('select');
       
        for(i=0;bokse.length>i;i++) {
            bokse[i].name            = bokse[i].name.replace('[1]','[' + act_rabat + ']');
            bokse[i].selectedIndex    = 0;
        }
       
        placering.appendChild(div);
    }
   
    var act_kat        = 1;
   
    function kat_add() {
        var placering    = document.getElementById('kat');
        var div            = document.getElementById('skabelon_kat').cloneNode(true);
        div.id            = div.id + '_' + (++act_kat);
       
        var bokse        = div.getElementsByTagName('select');
       
        for(i=0;bokse.length>i;i++) {
            bokse[i].name            = bokse[i].name.replace('[1]','[' + act_kat + ']');
            bokse[i].selectedIndex    = 0;
        }
       
        placering.appendChild(div);
    }
   
    var act_tilbud        = 1;
   
    function tilbud_add() {
        var placering    = document.getElementById('tilbud');
        var div            = document.getElementById('skabelon_tilbud').cloneNode(true);
        div.id            = div.id + '_' + (++act_tilbud);
       
        var bokse        = div.getElementsByTagName('input');
       
        for(i=0;bokse.length>i;i++) {
            bokse[i].name            = bokse[i].name.replace('[1]','[' + act_tilbud + ']');
            bokse[i].value            = '';
        }
       
        placering.appendChild(div);
    }




   
    window.onload = function() {
        if(document.opret.navn.value == '') document.opret.navn.focus();
        else document.opret.navn.select();
       
        // mcfaddvariant('reset');
// ^- få php til at sætte // foran ovenstående og outputte nedenstående...


var alvtmp;
var alvtypecount="";
var alvvarcount="";

var alvinit="[;]Hvid[,]Small[,]2[,]3[,]4[,]Medium[,]22[,]33[,]44[;]Sort[,]Small[,]222[,]333[,]444[,]Large[,]2222[,]3333[,]4444";


alvtmp=alvinit.split("[;]");
for(i=1;i<alvtmp.length;i++){alvvarcount+="[_]"+alvtmp[i].substr(0,alvtmp[i].indexOf("[,]"));}
alvvarcount=alvvarcount.replace("[_]","");alvvarcount=alvvarcount.split("[_]");
for(i=1;i<alvtmp.length;i++){alvtypecount+="[_]"+alvtmp[i].substr(alvtmp[i].indexOf("[,]"));}
alvtypecount=alvtypecount.replace("[_]","");alvtypecount=alvtypecount.split("[_]");

for(i=0;i<alvvarcount.length;i++){
mcfaddvariant(alvvarcount[i]);
alvtmp=alvtypecount[i].replace("[,]","");alvtmp=alvtmp.split("[,]");
for(i2=0;i2<alvtmp.length;i2=i2+4){
  mcftypeadd("mcftypeadd"+(i+1),alvtmp[i2],alvtmp[i2+1],alvtmp[i2+2],alvtmp[i2+3]);
}
}
    }




</script>
Avatar billede mclemens Nybegynder
06. maj 2006 - 23:26 #117
...
                <div id="mcfvhold"></div>


<script language="javascript" type="text/javascript">
    tnid = 3;
    cnid = 3;
</script>
Avatar billede mclemens Nybegynder
06. maj 2006 - 23:27 #118
javascriptet hertil...

mcfvars=new Array();

/* Script til tilføjelse af start holder til variantnoder samt flere variantnoder */
function mcfaddvariant(ctrl){

if(ctrl=="reset") mcfvars = new Array();

mcf0=document.getElementById("mcfvhold"); // Forbindelse til stedet indholdet skal indsættes


if(ctrl=="reset"){
  document.getElementById("mcftools").style.display="block";
//  document.getElementById("mcfcont2").style.display="block";
  document.forms.opret.onsubmit=function(){return mcalc();};
  mcfxtra0=document.createElement("div");
  mcfxtra0.setAttribute("id","mcfspcx123");
  mcfxtra0.className="mcfspc2";
  mcfxtra0b=document.createTextNode("\u00a0");
  mcfxtra0.appendChild(mcfxtra0b);
  mcf0.appendChild(mcfxtra0);
  document.getElementById("mcalcarr").value="";

}

mcf1=document.createElement("div");
mcf1.className="mcfvar";
mcf1.setAttribute("id","mcfv"+(+mcfvars.length+1));

  mcf2a=document.createElement("div");
  mcf2a.className="mcfvbox";

  mcf2a1a=document.createElement("input");
  mcf2a1a.style.width="200px";
  mcf2a1a.style.marginRight="3px";
  mcf2a1a.title="Indtast navnet på varianten";
  mcf2a1a.setAttribute("id","mcfvm"+(+mcfvars.length+1));
  mcf2a1a.setAttribute("type","text");
  mcf2a1a.setAttribute("name","variant"+(+mcfvars.length+1));

if((ctrl!="")&&(ctrl!="reset")&&(ctrl))mcf2a1a.setAttribute("value",ctrl);


  mcf2a1b=document.createElement("input");
  mcf2a1b.style.marginRight="3px";
  mcf2a1b.onclick=function(){mcftypeadd(this.id);}
  mcf2a1b.setAttribute("id","mcftypeadd"+(+mcfvars.length+1));
  mcf2a1b.setAttribute("name","mcftypeadd"+(+mcfvars.length+1));
  mcf2a1b.setAttribute("type","button");
  mcf2a1b.setAttribute("value","Tilføj type");

  mcf2a1c=document.createElement("input");
  mcf2a1c.onclick=function(){mcfvarrem(this.id);}
  mcf2a1c.setAttribute("id","mcfvarrem"+(+mcfvars.length+1));
  mcf2a1c.setAttribute("name","mcfvarrem"+(+mcfvars.length+1));
  mcf2a1c.setAttribute("type","button");
  mcf2a1c.setAttribute("value","Fjern type");

  mcf2a1d=document.createElement("input");
  mcf2a1d.className="mcfinvarr";
  mcf2a1d.setAttribute("id","mcfinvarr"+(+mcfvars.length+1));
  mcf2a1d.setAttribute("name","mcfinvarr"+(+mcfvars.length+1));
  mcf2a1d.setAttribute("type","hidden");
  mcf2a1d.setAttribute("value",1);

  mcf2a.appendChild(mcf2a1a);mcf2a.appendChild(mcf2a1b);
  mcf2a.appendChild(mcf2a1c);mcf2a.appendChild(mcf2a1d);
  mcf1.appendChild(mcf2a);

  mcf2b=document.createElement("div");
  mcf2b.className="mcfminn";
  mcf2b.setAttribute("id","mcfv"+(+mcfvars.length+1)+"m");

if((ctrl=="")||(ctrl=="reset")||(!ctrl)){
  mcf2b1=document.createElement("div");
  mcf2b1.className="mcfmtype";
  mcf2b1.setAttribute("id","mcfv"+(+mcfvars.length+1)+"m1");

    mcf2b2a=document.createElement("input");
    mcf2b2a.style.width="200px";
    mcf2b2a.style.marginLeft="20px";
    mcf2b2a.style.marginRight="3px";
    mcf2b2a.title="Indtast navnet på typen";
    mcf2b2a.onkeyup=function(){mcfchktype(this.id);}
    mcf2b2a.setAttribute("id","v"+(+mcfvars.length+1)+"n1");
    mcf2b2a.setAttribute("type","text");
    mcf2b2a.setAttribute("name","v"+(+mcfvars.length+1)+"n1");
   
    mcf2b2a.onfocus=function(){mcfchktype(this.id,2);}

    mcf2b2b=document.createElement("input");
    mcf2b2b.style.width="50px";
    mcf2b2b.style.marginRight="3px";
    mcf2b2b.title="Indtast prisforskel på typen";
    mcf2b2b.onchange=function(){mcfchktypev(this,0);}
    mcf2b2b.onfocus=function(){mcfchktype(this.id);}
    mcf2b2b.setAttribute("id","v"+(+mcfvars.length+1)+"p1");
    mcf2b2b.setAttribute("type","text");
    mcf2b2b.setAttribute("name","v"+(+mcfvars.length+1)+"p1");

    mcf2b2c=document.createElement("input");
    mcf2b2c.style.width="50px";
    mcf2b2c.style.marginRight="3px";
    mcf2b2c.title="Indtast vægtforskel på typen";
    mcf2b2c.onchange=function(){mcfchktypev(this,1);}
    mcf2b2c.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c.setAttribute("id","v"+(+mcfvars.length+1)+"v1");
    mcf2b2c.setAttribute("type","text");
    mcf2b2c.setAttribute("name","v"+(+mcfvars.length+1)+"v1");

    mcf2b2c2=document.createElement("input");
    mcf2b2c2.style.width="50px";
    mcf2b2c2.style.marginRight="3px";
    mcf2b2c2.title="Indtast lagerstatus på typen";
    mcf2b2c2.onchange=function(){mcfchktypev(this,2);}
    mcf2b2c2.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c2.setAttribute("id","v"+(+mcfvars.length+1)+"s1");
    mcf2b2c2.setAttribute("type","text");
    mcf2b2c2.setAttribute("name","v"+(+mcfvars.length+1)+"s1");




    mcf2b2d=document.createElement("img");
    mcf2b2d.className="mcfvi";
    mcf2b2d.setAttribute("id","mcftyperem"+(+mcfvars.length+1)+"nr1");
    mcf2b2d.onclick=function(){mcftyperem(this.id);}
    mcf2b2d.setAttribute("src","../_grafik/delete.gif");
    mcf2b2d.setAttribute("alt","Fjern type");




    mcf2b1.appendChild(mcf2b2a);
    mcf2b1.appendChild(mcf2b2b);
    mcf2b1.appendChild(mcf2b2c);
    mcf2b1.appendChild(mcf2b2c2);
    mcf2b1.appendChild(mcf2b2d);



  mcf2b.appendChild(mcf2b1);
}

  mcf1.appendChild(mcf2b);

mcf0.appendChild(mcf1);

mcfvars[mcfvars.length]="1";

/* Fjerner alle noder i et element med id="mcfvhold" ved reset (som ved opstart) */
if(ctrl=="reset")while(1<mcf0.childNodes.length)mcf0.removeChild(mcf0.childNodes[0]);
}

function mcfvarrem(tmpn){
tnid=tmpn.replace("mcfvarrem","");
tn=document.getElementById("mcfv"+tnid);
tp=document.getElementById("mcfvhold");
tp.removeChild(tn);
mcfvars[tnid-1]=0;
}

function mcftypeadd(tmpn,mcval1,mcval2,mcval3,mcval4){

tnid=tmpn.replace("mcftypeadd","");

cnid=document.getElementById("mcfinvarr"+tnid);
cnid.value=+cnid.value+1;

  mcf2b=document.getElementById("mcfv"+tnid+"m");

  mcf2b1=document.createElement("div");
  mcf2b1.className="mcfmtype";
  mcf2b1.setAttribute("id","mcfv"+tnid+"m"+cnid.value);

    mcf2b2a=document.createElement("input");
    mcf2b2a.style.width="200px";
    mcf2b2a.style.marginLeft="20px";
    mcf2b2a.style.marginRight="3px";
    mcf2b2a.title="Indtast navn på typen";
    mcf2b2a.setAttribute("id","v"+tnid+"n"+cnid.value);
    mcf2b2a.onchange=function(){mcfchktype(this.id);}
    mcf2b2a.setAttribute("type","text");
    mcf2b2a.setAttribute("name","v"+tnid+"n"+cnid.value);
   
    mcf2b2a.onfocus=function(){mcfchktype(this.id,2);}
if(mcval1)mcf2b2a.setAttribute("value",mcval1);

    mcf2b2b=document.createElement("input");
    mcf2b2b.style.width="50px";
    mcf2b2b.style.marginRight="3px";
    mcf2b2b.title="Indtast prisforskel på typen";
    mcf2b2b.onkeyup=function(){mcfchktypev(this,0);}
    mcf2b2b.onfocus=function(){mcfchktype(this.id);}
    mcf2b2b.setAttribute("id","v"+tnid+"p"+cnid.value);
    mcf2b2b.setAttribute("type","text");
    mcf2b2b.setAttribute("name","v"+tnid+"p"+cnid.value);
if(mcval2)mcf2b2b.setAttribute("value",mcval2);


    mcf2b2c=document.createElement("input");
    mcf2b2c.style.width="50px";
    mcf2b2c.style.marginRight="3px";
    mcf2b2c.title="Indtast vægtforskel på typen";
    mcf2b2c.onchange=function(){mcfchktypev(this,1);}
    mcf2b2c.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c.setAttribute("id","v"+tnid+"v"+cnid.value);
    mcf2b2c.setAttribute("type","text");
    mcf2b2c.setAttribute("name","v"+tnid+"v"+cnid.value);
if(mcval3)mcf2b2c.setAttribute("value",mcval3);


    mcf2b2c2=document.createElement("input");
    mcf2b2c2.style.width="50px";
    mcf2b2c2.style.marginRight="3px";
    mcf2b2c2.title="Indtast lagerstatus på typen";
    mcf2b2c2.onchange=function(){mcfchktypev(this,2);}
    mcf2b2c2.onfocus=function(){mcfchktype(this.id);}
    mcf2b2c2.setAttribute("id","v"+tnid+"s"+cnid.value);
    mcf2b2c2.setAttribute("type","text");
    mcf2b2c2.setAttribute("name","v"+tnid+"s"+cnid.value);
if(mcval4)mcf2b2c2.setAttribute("value",mcval4);


    mcf2b2d=document.createElement("img");
    mcf2b2d.className="mcfvi";
    mcf2b2d.setAttribute("id","mcftyperem"+tnid+"nr"+cnid.value);
    mcf2b2d.onclick=function(){mcftyperem(this.id);}
    mcf2b2d.setAttribute("src","../_grafik/delete.gif");
    mcf2b2d.setAttribute("alt","Fjern type");



    mcf2b1.appendChild(mcf2b2a);
    mcf2b1.appendChild(mcf2b2b);
    mcf2b1.appendChild(mcf2b2c);
    mcf2b1.appendChild(mcf2b2c2);
    mcf2b1.appendChild(mcf2b2d);

  mcf2b.appendChild(mcf2b1);

}







function mcftyperem(tmpn){
tnid=tmpn.replace("mcftyperem","");
tnid=tnid.split("nr");
tp=document.getElementById("mcfv"+tnid[0]+"m");
if(tp.childNodes.length=="1")alert("Du kan ikke fjerne denne type\n- Alle varianter skal minimum  have en type.\nFjern selve varianten istedet for - typen forsvinder samtidig.");
else{
  tn=document.getElementById("mcfv"+tnid[0]+"m"+tnid[1]);
  tp.removeChild(tn);
}
}







function mcalc(){
submitok=false;
submitokoverrule=true;
mcft="";

for(i0=0;i0<mcfvars.length;i0++){
  if(mcfvars[i0]!=0){
  mcalctree(+i0+1);
  }
}
document.getElementById("mcalcarr").value=mcft;

if((!submitok)||(!submitokoverrule)){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;}
else return true;
}

function mcalctree(tnid){

mcftmp="";

i=document.getElementById("mcfinvarr"+tnid).value;

tmp=document.getElementById("mcfvm"+tnid).value;
if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("mcfvm"+tnid).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}
chktmp=document.getElementById("mcfvm"+tnid).value;

if(chktmp!=""){
  for(i1=1;i1<=i;i1++){mcftmpadd=false;
  if(document.getElementById("v"+tnid+"n"+i1)){

    tmp=document.getElementById("v"+tnid+"n"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"n"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    chktest="[,]"+document.getElementById("v"+tnid+"n"+i1).value;
    if(chktest!="[,]"){submitok=true;mcftmpadd=true;
    mcftmp=mcftmp+chktest;

    tmp=document.getElementById("v"+tnid+"p"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"p"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"p"+i1).value;

    tmp=document.getElementById("v"+tnid+"v"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"v"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"v"+i1).value;

    tmp=document.getElementById("v"+tnid+"s"+i1).value;
    if((tmp.indexOf("\[,\]")>-1)||(tmp.indexOf("\[;\]")>-1)){submitokoverrule=false;document.getElementById("v"+tnid+"s"+i1).value=tmp.replace(/(\[,\])?(\[;\])?/g,"");}

    mcftmp=mcftmp+"[,]"+document.getElementById("v"+tnid+"s"+i1).value;
    }
  }
  }
  if(mcftmpadd)mcft=mcft+"[;]"+chktmp+mcftmp;
}
}




function mcfchktype(tmpid,chk){
xchk=tmpid;
if((tmpid.indexOf("n")>0)&&(chk==2))tmpid=tmpid.replace(/[n]/gi,"p");

if(tmpid.indexOf("n")<0){
  tmpid=tmpid.replace(/[pvs]/gi,"n");

  tmpid="v"+tmpid.substr(1);
  tn=document.getElementById(tmpid);

  tmpid2="mcfvm"+tmpid.substr(1,1);
  tn2=document.getElementById(tmpid2);

  if(tn2.value.replace(/ * /gi,"")==""){
  if(chk!=0)alert("Udfyld venligst variant navn først");
  tn2.value="";
  document.getElementById(tmpid.replace("n","p")).value="";
  document.getElementById(tmpid.replace("n","v")).value="";
  document.getElementById(tmpid.replace("n","s")).value="";
  tn2.focus();

  }else if((tn.value.replace(/ * /gi,"")=="")&&(xchk!=tn.id)){
  if(chk!=0)alert("Udfyld venligst type navn først");
  tn.value="";
  document.getElementById(tmpid.replace("n","p")).value="";
  document.getElementById(tmpid.replace("n","v")).value="";
  document.getElementById(tmpid.replace("n","s")).value="";
  tn.focus();
  }
}else{
  tn=document.getElementById(tmpid);
  if(tn.value.replace(/ * /gi,"")==""){
  tn1=tn.id.replace("n","p");
  mcfchktype(tn1,0);
  }else{
  if((tn.value.indexOf("[,]")>-1)||(tn.value.indexOf("[;]")>-1)){
    alert("Følgende tegnkombinationer må ikke være i navne feltet:\n[,] og [;] ... , og ; må godt være i feltet\n- bare ikke med [] lige rundt om sig\nDe nævnte tegnkombinationer er blevet fjernet.");
    tn.value=tn.value.replace(/(\[,\])?(\[;\])?/g,"");
  }
  }
}
}

function mcfchktypev(tmpid,chk){
if(chk==0){
  regsearch=tmpid.value.match(/[+-]?\d+(\.\d{2})?/);
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else if(tmpid.value!=""){
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre og . efterfulgt af to cifre\nf.eks.: +145.21 eller -1.85");
  tmpid.value="";
  }
}else if(chk==1){
  regsearch=tmpid.value.match(/[+-]?\d+/)
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else if(tmpid.value!=""){
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\n+/-/intet fortegn samt x-antal cifre\nf.eks.: +145 eller -1");
  tmpid.value="";
  }
}else{
  regsearch=tmpid.value.match(/\d+/)
  if((regsearch)&&(regsearch[0].length==tmpid.value.length)){
  //Indput godkendt
  }else if(tmpid.value!=""){
  alert("Der er sket en fejl ved indtastning\nFormatet for indtastning skal være:\nIntet fortegn samt x-antal cifre");
  tmpid.value="";
  }
}
}
Avatar billede mclemens Nybegynder
06. maj 2006 - 23:31 #119
... burde virke - eller rettere virker her med min lokale test ... kan evt. poste lokal test fil også - der er dog lidt js alerts baseret på iframe editors som vist ikke er helt med i min download tror jeg nok - samt et par links til dine php post håndterings filer da det er en save fra dit link... så det er nok ikke helt ideelt...
Avatar billede elskermad.dk Nybegynder
07. maj 2006 - 11:29 #120
Typisk: Så har man lige skrevet en hel smøre også gemmer eksperten det ikke :(

Ser lige om jeg kan huske det hele igen... Det ser rigtigt godt ud :) Har indsat den sidste del (hvor den selv generer felterne igen ved onload)

- Der er et problem med at en variant slettes ved submit hvis blot man har fjernet én type under den
- Det er ikke muligt at angive minusbeløb til andre end den første type under hver variant
- Der er kommet luft ovenover felterne (også selvom der ingen felter er)
- Der kommer en alert ved submit hvis der ikke findes nogen varianter - Det skal der ikke komme da det skal være muligt at oprette produkter uden definerede varianter

Mener der var et par ting mere som jeg har glemt igen, men skal se om jeg kan komme på dem igen :D

Ellers er jeg imponeret over det kunne lade sig gøre med sådan en onload-funktion!

Du kan stadig logge ind på sitet med samme brugernavn/password og se hvordan jeg har fået det sat op (kan jo ske jeg har glemt noget)
Avatar billede mclemens Nybegynder
07. maj 2006 - 11:59 #121
1. og 3. kan ikke få den til at vise fejlen - eksperimenterer med det iaften
4. av, den skal jeg lige kigge lidt på iaften... (kan godt se fejlen)

2. burde være denne (7-9-13)
function mcftypeadd(tmpn,mcval1,mcval2,mcval3,mcval4){
...
    mcf2b2b.onkeyup=function(){mcfchktypev(this,0);}

->

    mcf2b2b.onchange=function(){mcfchktypev(this,0);}
Avatar billede mclemens Nybegynder
07. maj 2006 - 12:08 #122
3. IE....
<td class='kol2'>
                <input type='hidden' name='varianter' id='mcalcarr'>
           
                <div id='mcfvhold'></div>
               
                <div id='mcftools'><input type='button' onclick='mcfaddvariant()' value='Tilføj variant'></div>
^ Prøv at slette mellemrum...

<td class="kol2"><input name="varianter" id="mcalcarr" type="hidden"><div id="mcfvhold"></div><div id="mcftools"><input onclick="mcfaddvariant()" value="Tilføj variant" type="button"></div></td>
Avatar billede elskermad.dk Nybegynder
07. maj 2006 - 12:10 #123
1. Jeg kan heller ikke få den til at fejle den fejl igen - Så i første omgang glememr vi den bare lige
2. Det funger - Selvom jeg ikke helt kan gennemskue hvorfor ;-)
3. Hvis du kigger på siden så er der en ekstra <br> (eller lignende margin) ovenover felterne - De står ikke udfor teksten "Varianter" til venstre
4. Super :)
Avatar billede elskermad.dk Nybegynder
07. maj 2006 - 12:12 #124
cnid og tnid skal ikke angives?

det hjalp at fjerne diverse mellemrum og linieskift! :)
Avatar billede elskermad.dk Nybegynder
07. maj 2006 - 12:19 #125
Et spørgsmål som ikke vedkommer variant-scriptet (men som dog stadig er js):

Under eksisterende billeder kan man tilføje endnu en dropdown-felt, men ved de tilføjede felter virker "luppen" ikke (billedbrowseren) - Den sender blot browseren til top via en # som den også linker til, men den burde bruge onClick'en i stedet og derved gå i en return false, men det virker ikke rigtigt :S
Avatar billede mclemens Nybegynder
07. maj 2006 - 12:27 #126
... uhm, 1-3 burde være ok (når vi glemmer 1 indtil videre...)

2 -> Fejlen jeg havde lavet var at den udførte kontrollen af indtastningen hver gang man trykkede på en tast ... d.v.s. den ville køre en validering lige efter man havde tastet minus tegnet ind - derfor meldte den fejl da minus alene ikke var gyldigt...


cnid og tnid??? - Hvis du tænker på regenereringen af elementerne så sørger scriptet automatisk for det hele ligesom når man opretter et nyt element... udvidelsen i scriptet sørger bare for at sætte værdierne ind samtidig med at den opretter elementerne...


[ Under eksisterende billeder kan man tilføje endnu en dropdown-felt, men ved de tilføjede felter virker "luppen" ikke (billedbrowseren) - Den sender blot browseren til top via en # som den også linker til, men den burde bruge onClick'en i stedet og derved gå i en return false, men det virker ikke rigtigt :S ]
- Har ikke kigget på den ... holder lige fokus et sted ad gangen - skal nok prøve at kigge lidt på den efter at variant scriptet kører ...
Avatar billede mclemens Nybegynder
07. maj 2006 - 12:52 #127
testede lidt lokalt ... så der er måske kommet et
par posts op mod din .php fil fra min lokale ip...

- prøv at udskifte dette funktions afsnit...


function mcalc(){
submitok=false;
submitokoverrule=true;
mcft="";

for(i0=0;i0<mcfvars.length;i0++){
  if(mcfvars[i0]!=0){
  mcalctree(+i0+1);
  }
}
document.getElementById("mcalcarr").value=mcft;

if(((!submitok)&&(mcft!=""))||((!submitokoverrule)&&(mcft!=""))){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;}
else return false;
}
Avatar billede elskermad.dk Nybegynder
07. maj 2006 - 12:54 #128
Den laver ingen udregninger på php-siden den poster blot også udskriver værdierne igen, så der sker ingenting ved at du poster mod min side...

Det skulle være for at den ikke "brokker" sig hvis der ingen varianter findes?
Avatar billede elskermad.dk Nybegynder
07. maj 2006 - 12:56 #129
Det ser ud til at være det der skulle til :)

Du har i øvrigt fået en mail retur fra mig...
Avatar billede mclemens Nybegynder
07. maj 2006 - 12:58 #130
[ Den laver ingen udregninger på php-siden den poster blot også udskriver værdierne igen, så der sker ingenting ved at du poster mod min side... ]
Niks... burde den ikke - troede måske der var oprettelse af produkter...

[ Det skulle være for at den ikke "brokker" sig hvis der ingen varianter findes? ]
... det burde det være - skal lige have testet om det stadig virker hvis man f.eks. opretter et produkt og om fejl i valideringen stadig opfanges - checker lidt videre om det virker godt nok - nu da jeg ved at din php fil bare outputter og ikke opretter produkter ...
Avatar billede mclemens Nybegynder
07. maj 2006 - 13:03 #131
valideringen røg der - så jeg vender lige tilbage med en rettelse senere...
Avatar billede mclemens Nybegynder
07. maj 2006 - 13:11 #132
kommer med en anden script rettelse lidt senere sender lige en e-mail til dig...
Avatar billede mclemens Nybegynder
07. maj 2006 - 13:19 #133
Hov glemte at svare på spørgsmålet om du måtte
bruge systemet som du havde lyst til:
Det er bare helt ok med mig ;)
Avatar billede mclemens Nybegynder
07. maj 2006 - 14:03 #134
tror den er der nu (håber)

function mcalc(){
submitok=false;
submitokoverrule=true;
mcft="";

for(i0=0;i0<mcfvars.length;i0++){
  if(mcfvars[i0]!=0){
  mcalctree(+i0+1);
  }
}
document.getElementById("mcalcarr").value=mcft;

if(((!submitok)&&(mcfvars.length>0))||((!submitokoverrule)&&(mcfvars.length>0))){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;}
else{return false;}
}
Avatar billede mclemens Nybegynder
07. maj 2006 - 14:08 #135
function mcalc(){
submitok=false;
submitokoverrule=true;
mcft="";

for(i0=0;i0<mcfvars.length;i0++){
  if(mcfvars[i0]!=0){
  mcalctree(+i0+1);
  }
}
document.getElementById("mcalcarr").value=mcft;

if(((!submitok)&&(mcfvars.length>0))||((!submitokoverrule)&&(mcfvars.length>0))){alert("Din formular er ikke afsendt årsagen kan være:\n- Du har oprettet en variant uden at angive minimum et navn\ntil en type under denne variant. Alle varianter skal minimum\nhave en type med et navn. Slet varianter uden typer.\n\nEller også har dine input indeholdt disse tegnkombinationer:\n[,] og/eller [;] - \(Bemærk , og ; er tilladt bare ikke i []\)");return false;}
else return true;
}
Avatar billede elskermad.dk Nybegynder
07. maj 2006 - 14:17 #136
Hvad er forskellen på den også det jeg havde oppe før?

Ser ud til at virke som det skal nu, kan alt fald ikke komme på nogen problemer :)
Avatar billede mclemens Nybegynder
07. maj 2006 - 15:09 #137
if(((!submitok)&&(mcfvars.length>0))||((!submitokoverrule)&&(mcfvars.length>0)))
^ mcfvars.length kontrol tilføjet ... checker om der er varianter ellers er mcfvars=0
Avatar billede mclemens Nybegynder
07. maj 2006 - 18:40 #138
offtopic ... (rettet onclick)
virker fint i FF uden rettelsen men prøv:

produkt_opret.js
--------------------
...

function billede_add_eksisterende() {
    var placering        = document.getElementById('eksisterende');
    var div                = document.getElementById('skabelon_eksisterende').cloneNode(true);
    div.id                = div.id + '_' + (++act_eksisterende);
   
    var bokse            = div.getElementsByTagName('select');
   
    for(i=0;bokse.length>i;i++) {
        bokse[i].id        = bokse[i].id.replace('[1]','[' + act_eksisterende + ']');
        bokse[i].name    = bokse[i].name.replace('[1]','[' + act_eksisterende + ']');
    }
   
    var funk            = div.getElementsByTagName('a');
   
    for(i=0;funk.length>i;i++) {
        funk[i].onclick    =function(){imagesbrowser(document.getElementById("billede_browse[" + act_eksisterende + "]").value,"billede_browse[" + act_eksisterende + "]");return false;}
    }
   
    placering.appendChild(div);
}

...
Avatar billede mclemens Nybegynder
09. maj 2006 - 09:05 #139
retur point http://www.eksperten.dk/spm/708142
... kontanter modtaget istedet ;)
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