Avatar billede Six Nybegynder
05. september 2007 - 00:51 Der er 43 kommentarer og
1 løsning

JavaScript: Indsæt i form, ved tryk på knap funktion.

Hej eksperter.

Jeg vil gerne have en funktion der kan indsætte tekst ved tryk på en knap - der skal indsættes i 3 felter i en form. Jeg har fået det til at virke meget primitivt og jeg har ikke mulighed for at teste om der allerede er indsat i felterne - Jeg er ikke den hurtigste puck på havnen hvad javascript angår. Håber der er noget hjælp at finde.

Til sagens kerne:

        <input name="" onclick="java script:document.getElementById('EgenBesk').value = document.getElementById('PomBesk').value; java script:document.getElementById('EgenAntal').value = document.getElementById('PomAntal').value; java script:document.getElementById('EgenPris').value = document.getElementById('PomPris').value;" value="1xPom" type="button" />
        <input type="hidden" id="PomBesk" value="Ekstra Pommes Frites" />
        <input type="hidden" id="PomAntal" value="1" />
        <input type="hidden" id="PomPris" value="15" />

Når jeg trykker på den knap, blider de værdier jeg har indsat i mine felter:

      <tr>
          <td bgcolor="yellow">
        </td>
        <td>
            <input type="text" id="EgenBesk" name="ret_info[]" maxlength="100" size="70"/>
        </td>
                <td>
            <input type="text" id="EgenPris" name="ret_pris[]" maxlength="10" size="1"/>
        </td>
                <td>
            <input type="text" id="EgenAntal" name="ret_antal[]" maxlength="10" size="1" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/>
        </td>
        </tr>

Det er meget primitivt og jeg kan snildt regne ud at jeg bliver nødt til at have en funktion til det her. - jeg skal bare have en ordenlig omgang starthjælp her.

Jeg prøver at forklare i pseudo kode her :D

Når jeg trykker på knappen skal den indsætte værdien i feltet der hører til. F.eks. skal PomPris indsættes i EgenPris - Hvis EgenPris allerede har en værdi, skal der indsættes i næste felt me d id="EgenPris" - Hvis det er de samme værdier der bliver indsat, som allerede står der, skal antal forhøjes med 1 pr. tryk

Håber i forstår hvor jeg vil hen. Point er underordnet for mig, hvis jeg får en god løsning der tilmed kan lære mig noget, så står der 200 point på højkant :D
Avatar billede olebole Juniormester
05. september 2007 - 01:43 #1
<ole>

Jeg fortår ikke, hvor du vil hen - men under alle omstændigheder skal der ikke oprettes et felt mere med en ID, der allerede eksisterer. ID'er _skal_ være unikke. Et felts ID er dét ene felts 'personnummer'  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
05. september 2007 - 01:44 #2
- jeg hverken fortår eller forstår  ;D
Avatar billede Six Nybegynder
05. september 2007 - 01:50 #3
Nåh ja - det er klart :D

WARNING: - det kommer til at fylde lidt her:

Hvis jeg har det her felter:

<tr>
  <td bgcolor="yellow"></td>
  <td><input type="text" id="EgenBesk" name="ret_info[]" maxlength="100" size="70"/></td>
  <td><input type="text" id="EgenPris" name="ret_pris[]" maxlength="10" size="1"/></td>
  <td><input type="text" id="EgenAntal" name="ret_antal[]" maxlength="10" size="1" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/></td>
</tr>
<tr>
  <td bgcolor="yellow"></td>
  <td><input type="text" id="EgenBesk1" name="ret_info[]" maxlength="100" size="70"/></td>
  <td><input type="text" id="EgenPris1" name="ret_pris[]" maxlength="10" size="1"/></td>
  <td><input type="text" id="EgenAntal1" name="ret_antal[]" maxlength="10" size="1" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/></td>
</tr>
<tr>
  <td bgcolor="yellow"></td>
  <td><input type="text" id="EgenBesk2" name="ret_info[]" maxlength="100" size="70"/></td>
  <td><input type="text" id="EgenPris2" name="ret_pris[]" maxlength="10" size="1"/></td>
  <td><input type="text" id="EgenAntal2" name="ret_antal[]" maxlength="10" size="1" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/></td>
</tr>

Så er planen den - (Det har med mad at gøre) - at der skal indsættes en beskrivelse af noget ind i EgenBesk med tilhørende pris og antal. F.eks. Pommes frites koster 15kr og antal skal være 1 og beskrivelsen er "Ekstra Pommes Frites".

Hvis jeg så allerede manuelt har udfyldt felterne med EgenBesk, EgenAntal, EgenPris så skal den indsætte det i EgenBesk1 osv. - Hvis jeg så allerede har indsat teksten en gang i endten EgenBesk(1,2) Så skal den lægge 1 til antal hvor pommes frites allerede er indsat.

Og til dette vil jeg gerne have en funktion, da jeg også skal bruge det til f.eks. Kroketter. håber du forstå hvor jeg vil hen nu ;D - ellers fyrer du bare løs :D
Avatar billede Six Nybegynder
05. september 2007 - 01:51 #4
Offtopic - hvordan kan det egentlig være du ikke ligger på top10 listen? - kan man slå det fra med ekspertenPRO? (ikke at jeg nogensinded får brug for det, bare ren interresse ;D)
Avatar billede Six Nybegynder
05. september 2007 - 02:12 #5
Ja det er ikke meget jeg er kommet frem til... men det er en start.

function InsertTextFromButton()
{
    if(!document.getElementById('EgenBesk').value) {
        document.getElementById('EgenBesk').value = document.getElementById('PomBesk').value;
        document.getElementById('EgenAntal').value = document.getElementById('PomAntal').value;
        document.getElementById('EgenPris').value = document.getElementById('PomPris').value;
    }
}
Avatar billede olebole Juniormester
05. september 2007 - 02:22 #6
fjappe >> jeg er desværre nødt til at give min dyne en glidende tackling, men kikker på det i morgen, hvis ikke andre har løst det inden  ;o)

Vedr. Top10, så er det nok små syv år siden, jeg er gået op i points. Da jeg havde passeret mit daværende 'eksperten-idol', kunne det være ligemeget.
Jeg kan i min egen boks (den i øverste venstre hjørne) se, at jeg skulle være samlet nummer 9 med 167.279 points. Hvorfor jeg så ikke står på Top10, ved jeg ikke - men jeg er helt sikker på, det ikke ødelægger min søvn ... hverken i nat eller fremover  :)
Avatar billede Six Nybegynder
05. september 2007 - 02:29 #7
Udbygning.

function InsertTextFromButton()
{
    if(document.getElementById('EgenBesk').value == "") {
        if(!document.getElementById('EgenBesk').value) {
            document.getElementById('EgenBesk').value = document.getElementById('PomBesk').value;
            document.getElementById('EgenAntal').value = document.getElementById('PomAntal').value;
            document.getElementById('EgenPris').value = document.getElementById('PomPris').value;
        } else {
            document.getElementById('EgenBesk1').value = document.getElementById('PomBesk').value;
            document.getElementById('EgenAntal1').value = document.getElementById('PomAntal').value;
            document.getElementById('EgenPris1').value = document.getElementById('PomPris').value;
        }
    document.getElementById('EgenAntal').value = document.getElementById('EgenAntal').value++
    }
}

document.getElementById('EgenAntal').value = document.getElementById('EgenAntal').value++
virker ikke - og skriver jeg + 1 istedet, så står der 11 :/
Avatar billede Six Nybegynder
05. september 2007 - 02:33 #8
Hehe, jeg er klar over at du ikke går op i point, det undrede mig bare at du ikke var i top10 listen :D - Jeg siger tak på forhånd, sov godt :)
Avatar billede Six Nybegynder
05. september 2007 - 02:55 #9
Nå, jeg må også give op for i aften :D

Det her er hvad jeg er kommet til, plus og minusknapperne er bare test.

function InsertTextFromButton()
{
        if(!document.getElementById('EgenBesk').value) {
            document.getElementById('EgenBesk').value = document.getElementById('PomBesk').value;
            document.getElementById('EgenAntal').value = document.getElementById('PomAntal').value;
            document.getElementById('EgenPris').value = document.getElementById('PomPris').value;
        } else {
            document.getElementById('EgenBesk1').value = document.getElementById('PomBesk').value;
            document.getElementById('EgenAntal1').value = document.getElementById('PomAntal').value;
            document.getElementById('EgenPris1').value = document.getElementById('PomPris').value;
        }
}
function addProduct() {
        document.getElementById('EgenAntal').value = ++document.getElementById('EgenAntal').value;
}
function substractProduct() {
    if(document.getElementById('EgenAntal').value >= "2") {
        document.getElementById('EgenAntal').value = --document.getElementById('EgenAntal').value;
    }
}
Avatar billede thesurfer Nybegynder
05. september 2007 - 03:01 #10
Forklaring på "+ 1 bliver til 11:
Når du bruger ".value", får du en streng retur. Hvis du bruger "+ noget", bliver "noget" tilføjet sidst i strengen.

Hvis du vil lægge noget til, dvs. regning, skal du først konverterer ".value" til et tal.

Hvis du ikke skal bruge kommatal, bruger du parseInt.
Hvis du skal bruge kommatal, bruger du parseFloat.

Som i: ...value = parseInt(...value) + 1;

Eksempel:

        document.getElementById('EgenAntal').value = parseInt(document.getElementById('EgenAntal').value) + 1;
Avatar billede thesurfer Nybegynder
05. september 2007 - 03:06 #11
Hmm.. Jeg mener at man også kunne bruge:

++document.getElementById('EgenAntal').value;

Altså, uden andet.. bare: ++document.getElementById('EgenAntal').value

Det skulle vist automatisk konvertere strengen til et tal, og lægge 1 til..
Avatar billede olebole Juniormester
05. september 2007 - 12:17 #12
document.getElementById('EgenAntal').value*1  ;o)

++VARIABLE tæller variablen op - men forskelligt fra ++VARIABLE

Prøv:
var bla = 1;
alert(bla++);
alert(bla);

- og:
var bla = 1;
alert(++bla)
alert(bla)

Derudover har jeg ikke tid til at checke resten lige nu  :)
Avatar billede olebole Juniormester
05. september 2007 - 12:17 #13
Dooohhhh ... sådan går det, når man har travlt  :D

++VARIABLE tæller variablen op - men forskelligt fra VARIABLE++
Avatar billede olebole Juniormester
05. september 2007 - 12:20 #14
- document.getElementById('EgenAntal').value*1 konverterer blot til tal, men jeg er ikke sikker på '++' kan det samme, hvis værdien ikke er konverteret på forhånd ... har ikke lige tid til at teste  :)
Avatar billede Six Nybegynder
05. september 2007 - 13:20 #15
Jeg prøvede både var++ og ++var hvor ++var så var en der talte min variabel op, hvis jeg lavede var++ så skete der intet.

Jeg prøver at fortsætte :D - men min funktion vil jeg gerne have til at virke så jeg jeg kan smide den i onclick på mine forskellige knapper.

Thesurfer - tak for din forklaring :D den var værdsat :)

Jeg tror egentlig at mine problemer ligger i at jeg for det første ikke kender meget til javascript og dets functioner. Plus at jeg ikke ved hvordan jeg skal få fejlmeldinger hvis jeg laver hø i den.
Avatar billede Six Nybegynder
05. september 2007 - 13:50 #16
Ja ok, det kan jeg godt se olebole - den ene tæller op, den anden har lagt til i begge alerts.
Avatar billede olebole Juniormester
05. september 2007 - 16:20 #17
Står plusserne før, tælles variablen op lige inden, funktionen afvikles.
Står de efter, tælles variablen op lige efter, funktionen afvikles.

Prøv, om du kan bruge:
    document.getElementById('EgenAntal').value = ++document.getElementById('EgenAntal').value;

- eller, om du skal ud i:
    document.getElementById('EgenAntal').value = ++(document.getElementById('EgenAntal').value*1);

Test mindst i IE og FF  ;o)
Avatar billede Six Nybegynder
05. september 2007 - 16:32 #18
function addProduct() {
        document.getElementById('EgenAntal').value = ++document.getElementById('EgenAntal').value;
}
den funktion virker fint nok :)
Avatar billede Six Nybegynder
05. september 2007 - 16:39 #19
Hvordan kan jeg få en variabel til at modtage hvilket id et element har?

Jeg vil f.eks. gerne have at hvis EgenBesk allerede har en værdi så skal den indsætte i EgenBesk1, er den fyldt, EgenBesk2 -

Men det skulle gerne kunne foregå automatisk, så jeg nemt kan overføre det til et andet produkt.

Det jeg sidder og leger med lige nu er her i rå format:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/JavaScript" language="JavaScript">
function InsertTextFromButton()
{
        if(!document.getElementById('EgenBesk').value) {
            document.getElementById('EgenBesk').value = document.getElementById('PomBesk').value;
            document.getElementById('EgenAntal').value = document.getElementById('PomAntal').value;
            document.getElementById('EgenPris').value = document.getElementById('PomPris').value;
        } else {
            document.getElementById('EgenBesk1').value = document.getElementById('PomBesk').value;
            document.getElementById('EgenAntal1').value = document.getElementById('PomAntal').value;
            document.getElementById('EgenPris1').value = document.getElementById('PomPris').value;
        }
}
function addProduct() {
    ++document.getElementById('EgenAntal').value;
}
function substractProduct() {
    if(document.getElementById('EgenAntal').value >=2) {
        --document.getElementById('EgenAntal').value;
    }
}
</script>
</head>
<body>
<table>
  <tr>
    <td class="td_nummer"></td>
    <td class="td_besk">Beskrivelse</td>
    <td class="td_pris">Pris</td>
    <td class="td_antal">Antal</td>
  </tr>
  <tr>
    <td class="td_nummer"></td>
    <td class="td_besk"><input onclick="InsertTextFromButton(this)" name="pommesfrites" value="1xPom" type="button" />
      <input onclick="addProduct(this)" name="add" value="+" type="button" />
      <input onclick="substractProduct(this)" name="substract" value="-" type="button" />
      <input type="hidden" id="PomBesk" value="Ekstra Pommes Frites" />
      <input type="hidden" id="PomAntal" value="1" />
      <input type="hidden" id="PomPris" value="15" />
    </td>
    <td class="td_pris"></td>
    <td class="td_antal"></td>
  </tr>
  <tr>
    <td bgcolor="yellow"></td>
    <td><input type="text" id="EgenBesk" name="ret_info[]" maxlength="100" size="70"/>
    </td>
    <td><input type="text" id="EgenPris" name="ret_pris[]" maxlength="10" size="1"/>
    </td>
    <td><input type="text" id="EgenAntal" name="ret_antal[]" maxlength="10" size="1" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/>
    </td>
  </tr>
  <tr>
    <td bgcolor="yellow"></td>
    <td><input type="text" id="EgenBesk1" name="ret_info[]" maxlength="100" size="70"/>
    </td>
    <td><input type="text" id="EgenPris1" name="ret_pris[]" maxlength="10" size="1"/>
    </td>
    <td><input type="text" id="EgenAntal1" name="ret_antal[]" maxlength="10" size="1" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/>
    </td>
  </tr>
</table>
</body>
</html>
Avatar billede Six Nybegynder
05. september 2007 - 16:40 #20
Jeg håber i måske kan følge mig, plus og minus knapperne skal ikke være der, der skal bare være én knap til pommesfrites og hvis pommesfrites værdierne allerede står i et af de felter der er, skal den bare lægge en til antal.
Avatar billede olebole Juniormester
05. september 2007 - 22:10 #21
fjappe >> jeg må lige spørge om præcis, hvad det er, du er ved at lave? Vi kan ligeså godt prøve at lave en god løsning i første hug.

Jeg  har på fornemmelsen, du er ved at lave en online bestillings seddel. Hvis det er rigtigt, vil jeg gerne vide:
1) Kan der være et vilkårligt antal bestillings linjer?
2) Kan der være flere extras - eller kun fritter?
Avatar billede olebole Juniormester
06. september 2007 - 00:17 #22
Okay ... nu har jeg lavet det her til dig:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/JavaScript">
/*
    Ret kun nNumLines og aExtras
    nNumLines skal svare til antal bestillings linjer
*/
var nNumLines = 2;
var aExtras = [
    {id:"pom", besk:"Ekstra Pommes Frites", antal:1, pris:15},
    {id:"sovs", besk:"Ekstra Ketchup", antal:1, pris:4.5},
    {id:"gnu", besk:"Ekstra Gnu Mule", antal:1, pris:18}
];

var oExtTempl = oDisplBody = null, nTotFields = 0;
function InsertTextFromButton(oBtn) {
    var sId = o = aInp = null;
    sId = oBtn.getAttribute("id");
    o = document.getElementById("ext_"+sId);
    if (o) {
        aInp = o.getElementsByTagName("input");
        aInp[2].setAttribute("value", ++aInp[2].value);
    } else {
        nTotFields++;
        o = oExtTempl.cloneNode(true);
        o.setAttribute("id", "ext_"+sId);
        oExtBody.appendChild(o);
        aInp = o.getElementsByTagName("input");
        aInp[0].setAttribute("id", "EgenBesk"+nTotFields);
        aInp[0].setAttribute("value", aExtras[sId].besk);
        aInp[1].setAttribute("id", "EgenPris"+nTotFields);
        aInp[1].setAttribute("value", aExtras[sId].pris);
        aInp[2].setAttribute("id", "EgenAntal"+nTotFields);
        aInp[2].setAttribute("value", aExtras[sId].antal);
    }
}

window.onload = function() {
    var oDisplBody = oTmpl = oPar = o = null;
    oDisplBody = document.getElementById("displBody");
    oExtBody = document.getElementById("extraBody");
    oExtTempl = oDisplBody.getElementsByTagName("tr")[0].cloneNode(true);
    nTotFields = nNumLines;
    oTmpl = document.getElementById("hiddenTempl");
    oPar = oTmpl.parentNode;
    o = null;
    oPar.removeChild(oTmpl);
    for (var i=aExtras.length-1; i>=0; i--) {
        o = oTmpl.cloneNode(true);
        o.setAttribute("id", aExtras[i].id+"Besk");
        o.setAttribute("value", aExtras[i].besk);
        oPar.appendChild(o);
       
        o = oTmpl.cloneNode(true);
        o.setAttribute("id", aExtras[i].id+"Antal");
        o.setAttribute("value", aExtras[i].antal);
        oPar.appendChild(o);
       
        o = oTmpl.cloneNode(true);
        o.setAttribute("id", aExtras[i].id+"Pris");
        o.setAttribute("value", aExtras[i].pris);
        oPar.appendChild(o);
        aExtras[aExtras[i].id] = aExtras[i];
        aExtras.pop();
    }
    oTmpl = o = oPar = null;
}
</script>
</head>
<body>
<table>
<thead>
<tr>
    <th class="td_nummer"></th>
    <th class="td_besk">Beskrivelse</th>
    <th class="td_pris">Pris</th>
    <th class="td_antal">Antal</th>
</tr>
</thead>
<tbody>
<tr>
    <td class="td_nummer"></td>
    <td class="td_besk" colspan="3"><input onclick="InsertTextFromButton(this)" id="pom" value="1xPom" type="button" />
        <input onclick="InsertTextFromButton(this)" id="gnu" value="1xGnu" type="button" />
        <input onclick="InsertTextFromButton(this)" id="sovs" value="1xKetch" type="button" />
        <input type="hidden" id="hiddenTempl" value="" /></td>
</tr>
</tbody>
<tbody id="displBody">
<tr>
    <td bgcolor="yellow"></td>
    <td><input type="text" id="EgenBesk" name="ret_info[]" maxlength="100" size="70"/></td>
    <td><input type="text" id="EgenPris" name="ret_pris[]" maxlength="10" size="1"/></td>
    <td><input type="text" id="EgenAntal" name="ret_antal[]" maxlength="10" size="1" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/></td>
</tr>
<tr>
    <td bgcolor="yellow"></td>
    <td><input type="text" id="EgenBesk1" name="ret_info[]" maxlength="100" size="70"/></td>
    <td><input type="text" id="EgenPris1" name="ret_pris[]" maxlength="10" size="1"/></td>
    <td><input type="text" id="EgenAntal1" name="ret_antal[]" maxlength="10" size="1" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/></td>
</tr>
</tbody>
<tbody id="extraBody">
<tr>
    <td colspan="4"><hr></td>
</tr>
</tbody>
</table>
</body>
</html>
Avatar billede olebole Juniormester
06. september 2007 - 00:20 #23
Som jeg ser opgaven (og det behøver jo ikke at være korrekt), ville det være smartest at skrive extras i linjer nedenunder bestillings linjerne - men ret mig, if I'm wrong  :)
Avatar billede Six Nybegynder
06. september 2007 - 00:24 #24
Olebole, ved første øjekast ser det der totalt perfekt ud. Jeg er sgu godt nok imponeret endnu engang :D

Jeg vil lige se om jeg kan fatte at få det smidt over i mit "system" - Men det du kommer med der er 100x bedre end det jeg selv havde tænkt på.

Og mange tak fordi du har brugt tid på at lave det der til mig.
Avatar billede Six Nybegynder
06. september 2007 - 00:27 #25
Jamen det er helt perfekt det der - Det er en del af et klik og vælg system jeg prøver at lave til en lokal grillbar der bringer mad ud. Og de ville gerne have det sådan at man selv kan skrive en vare ind og angive en pris på den, hvis kunden nu har specielle ønsker... ekstra svamp til sin ost 12kr 1stk

Men der skal også være nogle Standard knapper der så indsætter i tekstfelterne.. eller som du har gjort det(perfekt)

Jeg er seriøst vild med den løsning der!
Avatar billede olebole Juniormester
06. september 2007 - 00:38 #26
En lille udvidelse:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/JavaScript">
/*
    Ret kun nNumLines og aExtras
    nNumLines skal svare til antal bestillings linjer
*/
var nNumLines = 2;
var aExtras = [
    {id:"pom", besk:"Ekstra Pommes Frites", antal:1, pris:15},
    {id:"sovs", besk:"Ekstra Ketchup", antal:1, pris:4.5},
    {id:"gnu", besk:"Ekstra Gnu Mule", antal:1, pris:18}
];

var oLineTempl = oDisplBody = oExtBody = null, nTotFields = 0;
function InsertTextFromButton(oBtn) {
    var sId = o = aInp = null;
    sId = oBtn.getAttribute("id");
    o = document.getElementById("ext_"+sId);
    if (o) {
        aInp = o.getElementsByTagName("input");
        aInp[2].setAttribute("value", ++aInp[2].value);
    } else {
        o = InsertLine();
        o.setAttribute("id", "ext_"+sId);
        oExtBody.appendChild(o);
        aInp = o.getElementsByTagName("input");
        aInp[0].setAttribute("value", aExtras[sId].besk);
        aInp[1].setAttribute("value", aExtras[sId].pris);
        aInp[2].setAttribute("value", aExtras[sId].antal);
    }
}
function InsertNewOrderLine() {
    var o = InsertLine();
    oDisplBody.appendChild(o);
}
function InsertLine() {
    var aInp, o = oLineTempl.cloneNode(true);
    nTotFields++;
    aInp = o.getElementsByTagName("input");
    aInp[0].setAttribute("id", "EgenBesk"+nTotFields);
    aInp[1].setAttribute("id", "EgenPris"+nTotFields);
    aInp[2].setAttribute("id", "EgenAntal"+nTotFields);
    return o;
}

window.onload = function() {
    var oTmpl = oPar = o = null;
    oDisplBody = document.getElementById("displBody");
    oExtBody = document.getElementById("extraBody");
    oLineTempl = oDisplBody.getElementsByTagName("tr")[0].cloneNode(true);
    nTotFields = nNumLines;
    oTmpl = document.getElementById("hiddenTempl");
    oPar = oTmpl.parentNode;
    o = null;
    oPar.removeChild(oTmpl);
    for (var i=aExtras.length-1; i>=0; i--) {
        o = oTmpl.cloneNode(true);
        o.setAttribute("id", aExtras[i].id+"Besk");
        o.setAttribute("value", aExtras[i].besk);
        oPar.appendChild(o);
       
        o = oTmpl.cloneNode(true);
        o.setAttribute("id", aExtras[i].id+"Antal");
        o.setAttribute("value", aExtras[i].antal);
        oPar.appendChild(o);
       
        o = oTmpl.cloneNode(true);
        o.setAttribute("id", aExtras[i].id+"Pris");
        o.setAttribute("value", aExtras[i].pris);
        oPar.appendChild(o);
        aExtras[aExtras[i].id] = aExtras[i];
        aExtras.pop();
    }
    oTmpl = o = oPar = null;
}
</script>
</head>
<body>
<table>
<thead>
<tr>
    <th class="td_nummer"></th>
    <th class="td_besk">Beskrivelse</th>
    <th class="td_pris">Pris</th>
    <th class="td_antal">Antal</th>
</tr>
</thead>
<tbody>
<tr>
    <td class="td_nummer"></td>
    <td class="td_besk" colspan="3"><input onclick="InsertNewOrderLine()" value="Ny Linje" type="button" />
        <span style="margin:10px">&nbsp;</span>
        <input onclick="InsertTextFromButton(this)" id="pom" value="1xPom" type="button" />
        <input onclick="InsertTextFromButton(this)" id="gnu" value="1xGnu" type="button" />
        <input onclick="InsertTextFromButton(this)" id="sovs" value="1xKetch" type="button" />
        <input type="hidden" id="hiddenTempl" value="" /></td>
</tr>
</tbody>
<tbody id="displBody">
<tr>
    <td bgcolor="yellow"></td>
    <td><input type="text" id="EgenBesk" name="ret_info[]" maxlength="100" size="70"/></td>
    <td><input type="text" id="EgenPris" name="ret_pris[]" maxlength="10" size="1"/></td>
    <td><input type="text" id="EgenAntal" name="ret_antal[]" maxlength="10" size="1" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/></td>
</tr>
<tr>
    <td bgcolor="yellow"></td>
    <td><input type="text" id="EgenBesk1" name="ret_info[]" maxlength="100" size="70"/></td>
    <td><input type="text" id="EgenPris1" name="ret_pris[]" maxlength="10" size="1"/></td>
    <td><input type="text" id="EgenAntal1" name="ret_antal[]" maxlength="10" size="1" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/></td>
</tr>
</tbody>
<tbody id="extraBody">
<tr>
    <td colspan="4"><hr></td>
</tr>
</tbody>
</table>
</body>
</html>
Avatar billede olebole Juniormester
06. september 2007 - 00:40 #27
- ekstra svamp til sin grissetå 12kr 1stk .... *Muahaaahahahhaa*
Avatar billede Six Nybegynder
06. september 2007 - 00:43 #28
Det er nu integreret - og det er spiller bare totalt.

Ikke for at trække mere på dine ressourcer, end jeg allerede har gjort. Men nu er det script lige en tand for advanceret til mig. Kan man lave en knap der kan fjerne den nye body igen? - i tilfælde af at man nu trykker forkert.
Avatar billede Six Nybegynder
06. september 2007 - 00:44 #29
jamen jeg er helt paf lige nu... You saved the day! Det må man sgu alligevel give dig.
Avatar billede olebole Juniormester
06. september 2007 - 01:02 #30
Så tror jeg, den efterhånden har alt, du har bedt om - og så har jeg slanket den lidt. Vi har jo ikke længere brug for ID'erne på input-elementerne. Du kan bare indsætte så mange bestillings linjer, du ønsker at starte med ... jeg har kun skrevet én:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/JavaScript">
/*
    Ret kun aExtras
*/
var aExtras = [
    {id:"pom", besk:"Ekstra Pommes Frites", antal:1, pris:15},
    {id:"sovs", besk:"Ekstra Ketchup", antal:1, pris:4.5},
    {id:"gnu", besk:"Ekstra Gnu Mule", antal:1, pris:18}
];

var oLineTempl = oDisplBody = oExtBody = null;
function InsertTextFromButton(oBtn) {
    var sId = o = aInp = null;
    sId = oBtn.getAttribute("id");
    o = document.getElementById("ext_"+sId);
    if (o) {
        aInp = o.getElementsByTagName("input");
        aInp[2].setAttribute("value", ++aInp[2].value);
    } else {
        o = GetLineObj();
        o.setAttribute("id", "ext_"+sId);
        oExtBody.appendChild(o);
        aInp = o.getElementsByTagName("input");
        aInp[0].setAttribute("value", aExtras[sId].besk);
        aInp[1].setAttribute("value", aExtras[sId].pris);
        aInp[2].setAttribute("value", aExtras[sId].antal);
    }
}
function InsertNewOrderLine() {
    var o = GetLineObj();
    oDisplBody.appendChild(o);
}
function GetLineObj() {
    return oLineTempl.cloneNode(true);
}
function removeThis(o) {
    o.parentNode.removeChild(o);
}

window.onload = function() {
    var oTmpl = oPar = o = null;
    oDisplBody = document.getElementById("displBody");
    oExtBody = document.getElementById("extraBody");
    oLineTempl = oDisplBody.getElementsByTagName("tr")[0].cloneNode(true);
    oTmpl = document.getElementById("hiddenTempl");
    oPar = oTmpl.parentNode;
    o = null;
    oPar.removeChild(oTmpl);
    for (var i=aExtras.length-1; i>=0; i--) {
        o = oTmpl.cloneNode(true);
        o.setAttribute("value", aExtras[i].besk);
        oPar.appendChild(o);
        o = oTmpl.cloneNode(true);
        o.setAttribute("value", aExtras[i].antal);
        oPar.appendChild(o);
        o = oTmpl.cloneNode(true);
        o.setAttribute("value", aExtras[i].pris);
        oPar.appendChild(o);
        aExtras[aExtras[i].id] = aExtras[i];
        aExtras.pop();
    }
    oTmpl = o = oPar = null;
}
</script>
</head>
<body>
<table>
<thead>
<tr>
    <th class="td_nummer"></th>
    <th class="td_besk">Beskrivelse</th>
    <th class="td_pris">Pris</th>
    <th class="td_antal">Antal</th>
    <th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
    <td class="td_nummer"></td>
    <td class="td_besk" colspan="4"><input onclick="InsertNewOrderLine()" value="Ny Linje" type="button" />
        <span style="margin:10px">&nbsp;</span>
        <input onclick="InsertTextFromButton(this)" id="pom" value="1xPom" type="button" />
        <input onclick="InsertTextFromButton(this)" id="gnu" value="1xGnu" type="button" />
        <input onclick="InsertTextFromButton(this)" id="sovs" value="1xKetch" type="button" />
        <input type="hidden" id="hiddenTempl" value="" /></td>
</tr>
</tbody>
<tbody id="displBody">
<tr>
    <td bgcolor="yellow"></td>
    <td><input type="text"name="ret_info[]" maxlength="100" size="70"/></td>
    <td><input type="text" name="ret_pris[]" maxlength="10" size="1"/></td>
    <td><input type="text" name="ret_antal[]" maxlength="10" size="1" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/></td>
    <td><span onclick="removeThis(this.parentNode.parentNode)" title="Slet denne bestilling" style="cursor:default">X</span></td>
</tr>
</tbody>
<tbody id="extraBody">
<tr>
    <td colspan="5"><hr></td>
</tr>
</tbody>
</table>
</body>
</html>
Avatar billede olebole Juniormester
06. september 2007 - 01:05 #31
PS: Du kan også bruge et billede i stedet for X'et i et span. Uanset, hvilken konstruktion af en sletteknap, du laver, skal du bare sørge for, at argumentet i:
    removeThis(this.parentNode.parentNode)

- 'rammer' tr-elementet
Avatar billede Six Nybegynder
06. september 2007 - 01:18 #32
Jeg kan ikke takke nok for det her - Du får 200 point for det her, hvis du bare smider et svar til mig :D

Jeg har jo fået det på et sølvfad. Så er det bare med at lege videre på egen hånd og se om jeg kan finde hoved og hale i det hele hehe :)

Jeg kan ikke sætte ord på hvor godt det lige er, nu kan det system jeg har snart ikke være bedre til den grillbiks.

Mange tusinde tak for hjælpen! Den er uundværlig :)
Avatar billede olebole Juniormester
06. september 2007 - 01:19 #33
Selvtak. Det var en meget sjov, lille opgave  :)
Avatar billede olebole Juniormester
06. september 2007 - 01:21 #34
Skal du overhovedet bruge de skjulte felter til noget på serveren?
Avatar billede Six Nybegynder
06. september 2007 - 01:24 #35
Jamen det bliver bare ikke bedre :)
Avatar billede Six Nybegynder
06. september 2007 - 01:24 #36
Det var sgu en fejl, - jeg opretter et 170 points spørgsmål til dig, right away :)
Avatar billede olebole Juniormester
06. september 2007 - 01:26 #37
Nej, det behøver du ikke. Jeg har rigeligt med points  :)
Avatar billede Six Nybegynder
06. september 2007 - 01:29 #38
Hmm, nu har jeg jo alligevel oprettet det - så kan du ligeså godt tage dem :D du fortjener dem fuldt ud.
Avatar billede olebole Juniormester
06. september 2007 - 01:36 #39
Okay, men mens jeg fiser derover, må du lige svare mig på (06/09-2007 01:21:36)  ;o)
Avatar billede Six Nybegynder
06. september 2007 - 01:37 #40
Nej det skal jeg jo egentlig ikke - det var bare holdere til den information jeg skulle bruge i scriptet :)
Avatar billede olebole Juniormester
06. september 2007 - 01:58 #41
Så er den lidt slankere her:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<script type="text/JavaScript">
/*
    Ret kun oExtras
*/
var oExtras = {
    pom: {besk:"Ekstra Pommes Frites", antal:1, pris:15},
    sovs: {besk:"Ekstra Ketchup", antal:1, pris:4.5},
    gnu: {besk:"Ekstra Gnu Mule", antal:1, pris:18}
};

var oLineTempl = oDisplBody = oExtBody = null;
function InsertTextFromButton(oBtn) {
    var sId = o = aInp = null;
    sId = oBtn.getAttribute("id");
    o = document.getElementById("ext_"+sId);
    if (o) {
        aInp = o.getElementsByTagName("input");
        aInp[2].setAttribute("value", ++aInp[2].value);
    } else {
        o = GetLineObj();
        o.setAttribute("id", "ext_"+sId);
        oExtBody.appendChild(o);
        aInp = o.getElementsByTagName("input");
        aInp[0].setAttribute("value", oExtras[sId].besk);
        aInp[1].setAttribute("value", oExtras[sId].pris);
        aInp[2].setAttribute("value", oExtras[sId].antal);
    }
}
function InsertNewOrderLine() {
    var o = GetLineObj();
    oDisplBody.appendChild(o);
}
function GetLineObj() {
    return oLineTempl.cloneNode(true);
}
function removeThis(o) {
    o.parentNode.removeChild(o);
}

window.onload = function() {
    oDisplBody = document.getElementById("displBody");
    oExtBody = document.getElementById("extraBody");
    oLineTempl = oDisplBody.getElementsByTagName("tr")[0].cloneNode(true);
}
</script>
</head>
<body>
<table>
<thead>
<tr>
    <th class="td_nummer"></th>
    <th class="td_besk">Beskrivelse</th>
    <th class="td_pris">Pris</th>
    <th class="td_antal">Antal</th>
    <th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
    <td class="td_nummer"></td>
    <td class="td_besk" colspan="4"><input onclick="InsertNewOrderLine()" value="Ny Linje" type="button" />
        <span style="margin:10px">&nbsp;</span>
        <input onclick="InsertTextFromButton(this)" id="pom" value="1xPom" type="button" />
        <input onclick="InsertTextFromButton(this)" id="gnu" value="1xGnu" type="button" />
        <input onclick="InsertTextFromButton(this)" id="sovs" value="1xKetch" type="button" /></td>
</tr>
</tbody>
<tbody id="displBody">
<tr>
    <td bgcolor="yellow"></td>
    <td><input type="text"name="ret_info[]" maxlength="100" size="70"/></td>
    <td><input type="text" name="ret_pris[]" maxlength="10" size="1"/></td>
    <td><input type="text" name="ret_antal[]" maxlength="10" size="1" value="0" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;"/></td>
    <td><span onclick="removeThis(this.parentNode.parentNode)" title="Slet denne bestilling" style="cursor:default">X</span></td>
</tr>
</tbody>
<tbody id="extraBody">
<tr>
    <td colspan="5"><hr></td>
</tr>
</tbody>
</table>
</body>
</html>

- men husk, modtageren er nødt til at regne bestillingen ud i hånden for den korrekte pris. Teksten og prisen kan være ændret, så du har svært ved at lade et serverscript gøre det sikkert  :)
Avatar billede Six Nybegynder
06. september 2007 - 02:02 #42
Jeg forstår ikke lige hvad du mener med at modtageren skal regne det ud i hånden. - det skal nok lige siges at det kører på en lokal server og bruges lokalt - det er ikke for "kunder" det er butikken selv der tager imod opkald på tlf, smider det ind i systemet og printer en bestilling ud. Lige netop for at de slipper for at skrive ordre ned i hånden hehe :D
Avatar billede olebole Juniormester
06. september 2007 - 02:06 #43
Tak, så er også jeg med på, hvad det er, vi har bokset med  ;D
Avatar billede olebole Juniormester
06. september 2007 - 02:14 #44
For en ordens skyld bør nok lige null'e her:

function removeThis(o) {
    o.parentNode.removeChild(o);
    o = null;
}
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