Avatar billede askovdk Nybegynder
11. november 2010 - 16:58 Der er 23 kommentarer og
2 løsninger

Læg 2 tal sammen fra form felt

Jeg har 3 form felter:

<input type="text" name="ANTAL" size="28">
<input type="text" name="PRIS" size="28">
<input type="text" name="IALT" size="28">

Kan jeg lave sådan at når jeg skriver f.eks. 3 i ANTAL boksen og 1000 i PRIS boksen

Så bliver de automatisk lagt sammen og ført over i IALT feltet, ud at siden skal opdateres ?
Avatar billede olsensweb.dk Ekspert
11. november 2010 - 18:17 #1
noget a la dette:

<script type="text/javascript">

function total(){
var antal = document.getElementById('ANTAL').value;            
var pris = document.getElementById('PRIS').value;        
var total;
if(pris >0 && antal > 0) total = antal*pris;
else total = 0;       
document.getElementById('IALT').value = total;        
}       
</script>

<form id="test">
<input type="text" id="ANTAL" name="ANTAL" size="28" onblur="total()">
<input type="text" id="PRIS" name="PRIS" size="28"  onblur="total()">
<input type="text" id ="IALT" name="IALT" size="28">
</form>
Avatar billede bkp Nybegynder
11. november 2010 - 18:23 #2
Prøv dette:
<input type="text" name="antal" id="antal" size="28" onchange="changed()" />
<input type="text" name="pris" id ="pris" size="28" onchange="changed()" />
<input type="text" name="ialt" id="ialt" size="28" readonly="readonly" />
<script type="text/javascript">
  function changed() {
      var stk = Number(document.getElementById('antal').value);
      var p = Number(document.getElementById('pris').value);
      document.getElementById('ialt').value = stk * p;
  };
</script>
Avatar billede bkp Nybegynder
11. november 2010 - 18:30 #3
ronols-> Hvorfor bruger du onblur event, den er ikke standard?
Men ellers er det fint... og samme effekt som min.

askovdk læg mærke til at vi har begge tilføjet id til dine input felter, ellers kan de ikke findes i dit script.
Avatar billede majbom Novice
11. november 2010 - 19:06 #4
-> bkp - i hvilken standard er onblur-eventen ikke med?
Avatar billede bkp Nybegynder
11. november 2010 - 19:34 #5
splazz -> Det er ud fra egen erfaring, hvor jeg har oplevet at den ikke virkede, men onchange virkede.

Det er længe siden, så det er ikke sikkert det er et issue mere, så hvis ikke andre har oplevet problemer, så glem min kommentar om onblur
Avatar billede askovdk Nybegynder
12. november 2010 - 10:01 #6
Nu har jeg udvidet eksemplet lidt, og det virker også meget fint i Firefox, men ikke Internet Explorer ?

<script type="text/javascript">
  function changed() {
      var stk = Number(document.getElementById('antal').value);
      var pris = Number(document.getElementById('pris').value);
      var rabatprocent = Number(document.getElementById('rabatprocent').value);
      var rabatbelob = Number(document.getElementById('rabatbelob').value);
   

if(rabatprocent > 0) mellem = stk * pris / 100 * rabatprocent, ialt = stk * pris - mellem - rabatbelob;
else ialt = stk * pris - rabatbelob;       


      document.getElementById('ialt').value = ialt;
  };
</script>


<input type=text name=varetitel size="50">
<input type=text id=antal name=antal size="2" onchange="changed()">
<input type=text id=pris name=pris size="8" onchange="changed()">
<input type=text id=rabatprocent name=rabatprocent size="5" onchange="changed()">
<input type=text id=rabatbelob name=rabatbelob size="8" onchange="changed()">
<input type=text id=ialt name=ialt size="8" readonly="readonly">
Avatar billede olsensweb.dk Ekspert
12. november 2010 - 14:39 #7
<script type="text/javascript">
  function changed() {
    var stk = parseInt(document.getElementById('antal').value);
    var pris = parseFloat(document.getElementById('pris').value);
    var rabatprocent = parseFloat(document.getElementById('rabatprocent').value);
    var rabatbelob = parseFloat(document.getElementById('rabatbelob').value);
    var ialt =0; // var ikke erklæret   
    var mellem = 0; // behøver vist ikke at blive erklæret her
   
    if(rabatprocent > 0){
        mellem = ((stk * pris) / 100) * rabatprocent;
        ialt = (stk * pris) - mellem - rabatbelob;
    }
    else{
        ialt = (stk * pris) - rabatbelob;
    }     
    document.getElementById('ialt').value = ialt;
};
</script>


<input type=text name=varetitel size="50">
<input type=text id=antal name=antal size="2" onchange="changed()">
<input type=text id=pris name=pris size="8" onchange="changed()">
<input type=text id=rabatprocent name=rabatprocent size="5" onchange="changed()">
<input type=text id=rabatbelob name=rabatbelob size="8" onchange="changed()">
<input type=text id=ialt name=ialt size="8" readonly="readonly">
[/div]

1) ialt er ikke erklæret
2) du skal lave en block der udregner mellem og ialt
3) jeg har sat nogle hjælpe paranteser, for at udgå problemer med faktorens orden +/- har størrer priotet end *
Avatar billede olsensweb.dk Ekspert
12. november 2010 - 14:46 #8
[/div] skal du ikke bruge, jeg ville have lagt det i en blå boks, men glemte den øverste div (havde skrevet den i kladen men fik ikke kopieret den over :()
http://www.eksperten.dk/guide/1325
Avatar billede askovdk Nybegynder
12. november 2010 - 17:18 #9
Ok så er der vist ved at være lidt styr på det

Men kan jeg ikke have den flere gange på samme side ?

<script type="text/javascript">
  function changed() {
    var stk = parseInt(document.getElementById('antal').value);
    var pris = parseFloat(document.getElementById('pris').value);
    var rabatprocent = parseFloat(document.getElementById('rabatprocent').value);
    var rabatbelob = parseFloat(document.getElementById('rabatbelob').value);
    var ialt =0; // var ikke erklæret 
    var mellem = 0; // behøver vist ikke at blive erklæret her
 
    if(rabatprocent > 0){
        mellem = ((stk * pris) / 100) * rabatprocent;
        ialt = (stk * pris) - mellem - rabatbelob;
    }
    else{
        ialt = (stk * pris) - rabatbelob;
    }   
    document.getElementById('ialt').value = ialt;
};
</script>


<input type=text name=varetitel size="50">
<input type=text id=antal name=antal size="2" onchange="changed()">
<input type=text id=pris name=pris size="8" onchange="changed()">
<input type=text id=rabatprocent name=rabatprocent size="5" onchange="changed()">
<input type=text id=rabatbelob name=rabatbelob size="8" onchange="changed()">
<input type=text id=ialt name=ialt size="8" readonly="readonly">



OG så igen.... osv osv:

<script type="text/javascript">
  function changed() {
    var stk = parseInt(document.getElementById('antal').value);
    var pris = parseFloat(document.getElementById('pris').value);
    var rabatprocent = parseFloat(document.getElementById('rabatprocent').value);
    var rabatbelob = parseFloat(document.getElementById('rabatbelob').value);
    var ialt =0; // var ikke erklæret 
    var mellem = 0; // behøver vist ikke at blive erklæret her
 
    if(rabatprocent > 0){
        mellem = ((stk * pris) / 100) * rabatprocent;
        ialt = (stk * pris) - mellem - rabatbelob;
    }
    else{
        ialt = (stk * pris) - rabatbelob;
    }   
    document.getElementById('ialt').value = ialt;
};
</script>


<input type=text name=varetitel size="50">
<input type=text id=antal name=antal size="2" onchange="changed()">
<input type=text id=pris name=pris size="8" onchange="changed()">
<input type=text id=rabatprocent name=rabatprocent size="5" onchange="changed()">
<input type=text id=rabatbelob name=rabatbelob size="8" onchange="changed()">
<input type=text id=ialt name=ialt size="8" readonly="readonly">

?
Avatar billede majbom Novice
12. november 2010 - 17:43 #10
nej du kan ikke have den samme funktion to gange og de samme felter to gange og regne med at siden selv kan regne ud hvad du vil. men du kan udvide funktionen lidt:

<script type="text/javascript">
  function changed(number) {
    var stk = parseInt(document.getElementById('antal_'+number).value);
    var pris = parseFloat(document.getElementById('pris_'+number).value);
    var rabatprocent = parseFloat(document.getElementById('rabatprocent_'+number).value);
    var rabatbelob = parseFloat(document.getElementById('rabatbelob_'+number).value);
    var ialt =0; // var ikke erklæret
    var mellem = 0; // behøver vist ikke at blive erklæret her

    if(rabatprocent > 0){
        mellem = ((stk * pris) / 100) * rabatprocent;
        ialt = (stk * pris) - mellem - rabatbelob;
    }
    else{
        ialt = (stk * pris) - rabatbelob;
    } 
    document.getElementById('ialt_'+number).value = ialt;
};
</script>


<input type=text name=varetitel size="50">
<input type=text id=antal_1 name=antal size="2" onchange="changed(1)">
<input type=text id=pris_1 name=pris size="8" onchange="changed(1)">
<input type=text id=rabatprocent_1 name=rabatprocent size="5" onchange="changed(1)">
<input type=text id=rabatbelob_1 name=rabatbelob size="8" onchange="changed(1)">
<input type=text id=ialt_1 name=ialt size="8" readonly="readonly">


<input type=text name=varetitel size="50">
<input type=text id=antal_2 name=antal size="2" onchange="changed(2)">
<input type=text id=pris_2 name=pris size="8" onchange="changed(2)">
<input type=text id=rabatprocent_2 name=rabatprocent size="5" onchange="changed(2)">
<input type=text id=rabatbelob_2 name=rabatbelob size="8" onchange="changed(2)">
<input type=text id=ialt_2 name=ialt size="8" readonly="readonly">


hvis jeg har forstået dit "problem" :)
Avatar billede olsensweb.dk Ekspert
12. november 2010 - 17:45 #11
du kan selvføgelig ikke have 2 id'er på sammen side der hedder det sammen
du kan selvføgelig ikke have 2 functioner der hedder der sammen (tror ikke functions overloadning er tilladt i JS)

en af fordelene ved functioner er netop de kan bruges flere gange, uden at skulle gentage den.

hvorfor vil du gentage det ??, hvis det er andre input boxe skal de hedde noget andet

man kan godt have flere input boxe der har sammen "name" (array), men de kan ikke have sammen id
Avatar billede askovdk Nybegynder
12. november 2010 - 20:18 #12
Mange tak for hjælpen nu virker det :-) Smid svar så i kan få point
Avatar billede olsensweb.dk Ekspert
12. november 2010 - 23:09 #13
svar
Avatar billede majbom Novice
13. november 2010 - 10:53 #14
selv tak :)
Avatar billede majbom Novice
14. november 2010 - 18:36 #15
tfp :)
Avatar billede ksoren Nybegynder
14. november 2010 - 18:45 #16
Hvis man putter felterne ind i hver deres <form> ...

<script type="text/javascript">
function changed(form){
    form.blabla.value = form.antal.value;
}
</script>

<form>
<input type="text" name="antal" size="28" onchange="changed(this.form)">
<input type="text" name="blabla">
</form>

<form>
<input type="text" name="antal" size="28" onchange="changed(this.form)">
<input type="text" name="blabla">
</form>
Avatar billede pstidsen Novice
23. februar 2011 - 17:59 #17
Ved godt det her er et gammel spørgsmål, men bkp #2 (http://www.eksperten.dk/spm/923734#reply_7684557):

Jeg synes ikke jeg kan bruge den kode flere gange på samme side. Korrekt? Jeg vil gerne have 5 linjer med varenummer, pris, antal, i alt pris. Til udregning af i alt pris har jeg jo de fem javascripts. Koden ser sådan her ud:

    <div> <tr>
        <td>Vare:</td><td><input name="vare1" style="width:375px;" type="text"></td><td>Pris:</td><td><input type="text" style="width:375px;" name="pris1" id="pris1" onchange="changed()" /></td><td>Antal:</td><td><input type="text" style="width:375px;" name="antal1" id ="antal1" size="28" onchange="changed()" /></td><td>I alt:</td><td><input type="text" style="width:375px;" name="ialt1" id="ialt1" size="28" readonly="readonly" /></td>
    <script type="text/javascript">
        function changed() {
        var stk = Number(document.getElementById('antal1').value);
        var p = Number(document.getElementById('pris1').value);
        document.getElementById('ialt1').value = stk * p;
        };
    </script>
    </tr>
   
    <tr>
        <td>Vare:</td><td><input name="vare2" style="width:375px;" type="text"></td><td>Pris:</td><td><input type="text" style="width:375px;" name="pris2" id="pris2" onchange="changed()" /></td><td>Antal:</td><td><input type="text" style="width:375px;" name="antal2" id ="antal2" size="28" onchange="changed()" /></td><td>I alt:</td><td><input type="text" style="width:375px;" name="ialt2" id="ialt2" size="28" readonly="readonly" /></td>
    <script type="text/javascript">
        function changed() {
        var stk = Number(document.getElementById('antal2').value);
        var p = Number(document.getElementById('pris2').value);
        document.getElementById('ialt2').value = stk * p;
        };
    </script>
    </tr>
   
    <tr>
        <td>Vare:</td><td><input name="vare3" style="width:375px;" type="text"></td><td>Pris:</td><td><input type="text" style="width:375px;" name="pris3" id="pris3" onchange="changed()" /></td><td>Antal:</td><td><input type="text" style="width:375px;" name="antal3" id ="antal3" size="28" onchange="changed()" /></td><td>I alt:</td><td><input type="text" style="width:375px;" name="ialt3" id="ialt3" size="28" readonly="readonly" /></td>
    <script type="text/javascript">
        function changed() {
        var stk = Number(document.getElementById('antal3').value);
        var p = Number(document.getElementById('pris3').value);
        document.getElementById('ialt3').value = stk * p;
        };
    </script>
    </tr>
   
    <tr>
        <td>Vare:</td><td><input name="vare4" style="width:375px;" type="text"></td><td>Pris:</td><td><input type="text" style="width:375px;" name="pris4" id="pris4" onchange="changed()" /></td><td>Antal:</td><td><input type="text" style="width:375px;" name="antal4" id ="antal4" size="28" onchange="changed()" /></td><td>I alt:</td><td><input type="text" style="width:375px;" name="ialt4" id="ialt4" size="28" readonly="readonly" /></td>
    <script type="text/javascript">
        function changed() {
        var stk = Number(document.getElementById('antal4').value);
        var p = Number(document.getElementById('pris4').value);
        document.getElementById('ialt4').value = stk * p;
        };
    </script>
    </tr>
   
    <tr>
        <td>Vare:</td><td><input name="vare5" style="width:375px;" type="text"></td><td>Pris:</td><td><input type="text" style="width:375px;" name="pris5" id="pris5" onchange="changed()" /></td><td>Antal:</td><td><input type="text" style="width:375px;" name="antal5" id ="antal5" size="28" onchange="changed()" /></td><td>I alt:</td><td><input type="text" style="width:375px;" name="ialt5" id="ialt5" size="28" readonly="readonly" /></td>
    <script type="text/javascript">
        function changed() {
        var stk = Number(document.getElementById('antal5').value);
        var p = Number(document.getElementById('pris5').value);
        document.getElementById('ialt5').value = stk * p;
        };
    </script>
    </tr> </div>
Avatar billede pstidsen Novice
23. februar 2011 - 17:59 #18
Fejl på de der div åbenbart, hvorfor kommer det ikke i en blå kasse?:O
Avatar billede majbom Novice
23. februar 2011 - 18:38 #19
du skal bruge squarebrackets uden om div, pre osv...

og så se #10, der er løsningen på dit problem :)
Avatar billede pstidsen Novice
23. februar 2011 - 20:25 #20
Ups, ja selvfølge skal der bruges []. Har skrevet så meget html i dag at jeg glemte *GG*. Men synes ikke det virker. Følgende js står øverst i min body:

<script type="text/javascript">
  function changed(number) {
    var stk = parseInt(document.getElementById('antal_'+number).value);
    var pris = parseFloat(document.getElementById('pris_'+number).value);
      document.getElementById('ialt_'+number).value = stk * p;
  };
</script>

Det her er så en af de linjer hvor det skal virke:

<td>Vare:</td><td><input name="vare1" style="width:375px;" type="text"></td><td>Pris:</td><td><input type="text" style="width:375px;" name="pris1" id="pris" onchange="changed(1)" /></td><td>Antal:</td><td><input type="text" style="width:375px;" name="antal1" id="antal" onchange="changed(1)" /></td><td>I alt:</td><td><input type="text" style="width:375px;" name="ialt1" id="ialt" readonly="readonly" /></td>
Avatar billede majbom Novice
23. februar 2011 - 21:04 #21
smid scriptet i dit head-tag hvor det hører til :)

og så prøv med:


<td>Vare:</td><td><input name="vare1" style="width:375px;" type="text"></td><td>Pris:</td><td><input type="text" style="width:375px;" name="pris1" id="pris_1" onchange="changed(1)" /></td><td>Antal:</td><td><input type="text" style="width:375px;" name="antal1" id="antal_1" onchange="changed(1)" /></td><td>I alt:</td><td><input type="text" style="width:375px;" name="ialt1" id="ialt" readonly="readonly" /></td>
Avatar billede majbom Novice
23. februar 2011 - 21:05 #22
glemte

id="ialt"

som skal være

id="ialt_1"
Avatar billede pstidsen Novice
23. februar 2011 - 21:16 #23
Slettede pareint og parsefloat fra script. Det stod der ikke i #2, men det gjorde der i #10. Det virkede. Script:

<script type="text/javascript">
  function changed(number) {
      var stk = Number(document.getElementById('antal'+number).value);
      var p = Number(document.getElementById('pris'+number).value);
      document.getElementById('ialt'+number).value = stk * p;
  };
</script>



Html linje:

<td>Vare:</td><td><input name="vare1" style="width:375px;" type="text"></td><td>Pris:</td><td><input type="text" style="width:375px;" name="pris1" id="pris1" onchange="changed(1)" /></td><td>Antal:</td><td><input type="text" style="width:375px;" name="antal1" id="antal1" onchange="changed(1)" /></td><td>I alt:</td><td><input type="text" style="width:375px;" name="ialt1" id="ialt1" readonly="readonly" /></td>

Vil du have nogle points for svar?
Avatar billede pstidsen Novice
23. februar 2011 - 21:16 #24
Html linje:

<td>Vare:</td><td><input name="vare1" style="width:375px;" type="text"></td><td>Pris:</td><td><input type="text" style="width:375px;" name="pris1" id="pris1" onchange="changed(1)" /></td><td>Antal:</td><td><input type="text" style="width:375px;" name="antal1" id="antal1" onchange="changed(1)" /></td><td>I alt:</td><td><input type="text" style="width:375px;" name="ialt1" id="ialt1" readonly="readonly" /></td>



(span kan ikke li linjeskift! :O)
Avatar billede majbom Novice
23. februar 2011 - 22:07 #25
det burde nu også virke med parseint og float.

skidt med points :)
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