Avatar billede spm Nybegynder
27. april 2008 - 21:52 Der er 9 kommentarer og
2 løsninger

Automatisk opdatering af felt ved indtast af tal.

Hej. Hvordan får man et felt til automatisk at opdatere sig selv?

Jeg har en variable der hedder pris=30
der ud over har jeg nogle felter
<input type=text size=4 value=0 name=lager-alm>  (lager status)
<input type=text size=4 value=0 name=ind-alm>    (indgået)
<input type=text size=4 value=0 name=ud-alm>    (udgået)
<input type=text size=4 value=0 name=ialt-alm>  (ialt)
<input type=text size=4 value=0 name=rest-alm>  (rest)
<input type=text size=4 name=solgt>              (solgt)
<input type=text size=4 name=sum>                (sum af dagssætning)

Feltet rest skal opdatere sig selv når der tastet i ind- og udgået.
Altså ialt = lager+indgået-udgået
Solgt skal så være: solgt = ialt - rest
og summen skal så være Sum = solgt * pris.

Dvs feltet ialt, solgt og sum skal kunne opdatere sig selv.
Håber jeg har forklaret mig godt nok. Nogen bud?
Avatar billede w13 Novice
28. april 2008 - 09:29 #1
Nu ved jeg jo ikke, hvor "pris" kommer fra, men du skal lave en funktion:

<script type="text/javascript">
function Calculate(){
  var oForm=document.getElementById("formens-id");
  var oLager=oForm["lager-alm"];
  var oInd=oForm["ind-alm"];
  var oUd=oForm["ud-alm"];
  var oIAlt=oForm["ialt-alm"];
  var oRest=oForm["rest-alm"];
  var oSolgt=oForm["solgt"];
  var oSum=oForm["sum"];
  var iPris=5;

  oIAlt.value=parseInt(oLager.value)+parseInt(oInd.value)-parseInt(oUd.value);
  oSolgt.value=parseInt(oIAlt.value)-parseInt(oRest.value);
  oSum.value=parseInt(oSolgt.value)*iPris);
}
</script>

<input type=text size=4 value=0 name="lager-alm" onchange="Calculate()">
<input type=text size=4 value=0 name="ind-alm" onchange="Calculate()">
<input type=text size=4 value=0 name="ud-alm" onchange="Calculate()">
<input type=text size=4 value=0 name="ialt-alm" onchange="Calculate()">
<input type=text size=4 value=0 name="rest-alm" onchange="Calculate()">
<input type=text size=4 name="solgt" onchange="Calculate()">
<input type=text size=4 name="sum" onchange="Calculate()">
Avatar billede roenving Novice
28. april 2008 - 13:19 #2
Hvis man alligevel starter fra form-felterne, kan man jo medsende den derfra:

<form action=" ... ">
<input type=text size=4 value=0 name="lager-alm" onchange="Calculate(this.form)">

...
</form>

-- og i funktionen:

function Calculate(f){
  var oLager = f["lager-alm"];
  var oInd = f["ind-alm"];

...
Avatar billede spm Nybegynder
28. april 2008 - 13:49 #3
Hmm. Den ville ikke rigtigt helt.
Der er jo flere vare end blot Alm. Jeg har tilpasset det og når jeg så åbner det regner den ikke rigtigt på det. for at adskilde hver calculate funktion fra hinanden hedder den første 1calculate() og den anden 2calculate osv.
<?
$vare = mysql_query("SELECT * FROM database ORDER BY id");
while($vis = mysql_fetch_array($vare)){
?>
<script type="text/javascript">
function <? echo $i;?>Calculate(){
  var oForm=document.getElementById("told");
  var o<? echo $i;?>Lager=oForm["<? echo "lager-$vis[2]";?>"];
  var o<? echo $i;?>Ind=oForm["<? echo "ind-$vis[2]";?>"];
  var o<? echo $i;?>Ud=oForm["ud-alm"];
  var o<? echo $i;?>IAlt=oForm["<? echo "ud-$vis[2]";?>"];
  var o<? echo $i;?>Rest=oForm["<? echo "rest-$vis[2]";?>"];
  var o<? echo $i;?>Solgt=oForm["<? echo "solgt-$vis[2]";?>"];
  var o<? echo $i;?>Sum=oForm["<? echo "sum-$vis[2]";?>"];
  var <? echo $i;?>Pris=<? echo $vis[3];?>;

  o<? echo $i;?>IAlt.value=parseInt(o<? echo $i;?>Lager.value)+parseInt(o<? echo $i;?>Ind.value)-parseInt(o<? echo $i;?>Ud.value);
  o<? echo $i;?>Solgt.value=parseInt(o<? echo $i;?>IAlt.value)-parseInt(o<? echo $i;?>Rest.value);
  o<? echo $i;?>Sum.value=parseInt(o<? echo $i;?>Solgt.value)*<? echo $i;?>Pris);
}
</script>

<tr>
<td width='20%'><? echo $vis[2];?></td>
<td width='20%'><? echo $vis[3];?></td>
<td width='20%'><input type="text" <? echo $type; ?> size="4" value="0" name="<? echo "lager-$vis[2]";?>" onchange="<? echo $i;?>Calculate(this.form)"></td>
<td width='20%'><input type="text" <? echo $type; ?> size="4" value="0" name="<? echo "ind-$vis[2]";?>" onchange="<? echo $i;?>Calculate(this.form)"></td>
<td width='20%'><input type="text" <? echo $type; ?> size="4" value="0" name="<? echo "ud-$vis[2]";?>" onchange="<? echo $i;?>Calculate(this.form)"></td>
<td width='20%'><input type="text" <? echo $type; ?> size="4" value="0" name="<? echo "ialt-$vis[2]";?>" onchange="<? echo $i;?>Calculate(this.form)"></td>
<td width='20%'><input type="text" <? echo $type; ?> size="4" value="0" name="<? echo "rest-$vis[2]";?>" onchange="<? echo $i;?>Calculate(this.form)"></td>
<td width='20%'><input type="text" size="4" value="0" name="<? echo "solgt-$vis[2]";?>" onchange="<? echo $i;?>Calculate(this.form)"></td>
<td width='20%'><input type="text"  size="4" value=0 name="<? echo "sum-$vis[2]";?>" onchange="<? echo $i;?>Calculate(this.form)"></td>

</tr>
<?
$i = $i+1;
}

?>
<input type=submit value=post>
</form>


Er det fordi det er en blanding af php og java?
Det skal lige siges at hvis jeg siger "view source" via min browser ser det sådan her ud:
<form ACTION="" METHOD="post" ID="told">
<input type=hidden value="27/04/2008" name=dato>

<table border='1' width='50%'>
<tr>
<td width='20%'>vare</td>
<td width='20%'>pris</td>
<td width='20%'>Lager</td>
<td width='20%'>Indg&aring;et</td>
<td width='20%'>udg&aring;et</td>

<td width='20%'>Ialt</td>
<td width='20%'>Rest</td>
<td width='20%'>Solgt</td>
<td width='20%'>Ialt</td>
</tr><script type="text/javascript">
function 1Calculate(){
  var oForm=document.getElementById("told");
  var o1Lager=oForm["lager-alm"];
  var o1Ind=oForm["ind-alm"];
  var o1Ud=oForm["ud-alm"];
  var o1IAlt=oForm["ud-alm"];
  var o1Rest=oForm["rest-alm"];
  var o1Solgt=oForm["solgt-alm"];
  var o1Sum=oForm["sum-alm"];
  var 1Pris=27;

  o1IAlt.value=parseInt(o1Lager.value)+parseInt(o1Ind.value)-parseInt(o1Ud.value);
  o1Solgt.value=parseInt(o1IAlt.value)-parseInt(o1Rest.value);
  o1Sum.value=parseInt(o1Solgt.value)*1Pris);
}
</script>

<tr>
<td width='20%'>alm</td>
<td width='20%'>27</td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="lager-alm" onchange="1Calculate()"></td>

<td width='20%'><input type="text" ENABLED size="4" value="0" name="ind-alm" onchange="1Calculate()"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="ud-alm" onchange="1Calculate()"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="ialt-alm" onchange="1Calculate()"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="rest-alm" onchange="1Calculate()"></td>
<td width='20%'><input type="text" size="4" value="0" name="solgt-alm" onchange="1Calculate()"></td>
<td width='20%'><input type="text"  size="4" value=0 name="sum-alm" onchange="1Calculate()"></td>

</tr>
<script type="text/javascript">
function 2Calculate(){
  var oForm=document.getElementById("told");
  var o2Lager=oForm["lager-lux"];
  var o2Ind=oForm["ind-lux"];
  var o2Ud=oForm["ud-alm"];
  var o2IAlt=oForm["ud-lux"];
  var o2Rest=oForm["rest-lux"];
  var o2Solgt=oForm["solgt-lux"];
  var o2Sum=oForm["sum-lux"];
  var 2Pris=30;

  o2IAlt.value=parseInt(o2Lager.value)+parseInt(o2Ind.value)-parseInt(o2Ud.value);
  o2Solgt.value=parseInt(o2IAlt.value)-parseInt(o2Rest.value);
  o2Sum.value=parseInt(o2Solgt.value)*2Pris);
}
</script>

<tr>
<td width='20%'>lux</td>
<td width='20%'>30</td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="lager-lux" onchange="2Calculate()"></td>

<td width='20%'><input type="text" ENABLED size="4" value="0" name="ind-lux" onchange="2Calculate()"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="ud-lux" onchange="2Calculate()"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="ialt-lux" onchange="2Calculate()"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="rest-lux" onchange="2Calculate()"></td>
<td width='20%'><input type="text" size="4" value="0" name="solgt-lux" onchange="2Calculate()"></td>
<td width='20%'><input type="text"  size="4" value=0 name="sum-lux" onchange="2Calculate()"></td>

</tr>


Er jeg helt galt på den?????????
Avatar billede spm Nybegynder
28. april 2008 - 13:50 #4
i det overstående står der Calculate(this.form) - men jeg har prøvet på begge måder intet virker
Avatar billede roenving Novice
28. april 2008 - 14:19 #5
Ja, du behøver ikke at have en masse funktioner til at gøre det samme, du overfører jo i forvejen den præcise reference til formen, og form-tags kan ikke stå inde i tabeller, hvis ikke de står i en celle ...

-- og en javascript-identifier må ikke starte med et tal, så det vil absolut give fejl ...

-- og 7 celler, der hver fylder 20% giver jo ikke mening, sæt hellere en størrelse, du ved virker ...

-- hrm, det er jo så een eneste form, men så kan vi finde vis-teksten og benytte den:

<script type="text/javascript">
var price = [];
function Calculate(elm){
  var ident = elm.name.split("-")[1], f = elm.form;
  var oLager = f["lager-" + ident];
  var oInd = f["ind-" + ident];
  var oUd = f["ud-" + ident];
  var oIAlt = f["ud-" + ident];
  var oRest = f["rest-" + ident];
  var oSolgt = f["solgt-" + ident];
  var oSum = f["sum-" + ident];
  var Pris = price[ident];//her må du henvise til en variabel

  oIAlt.value=parseInt(oLager.value)+parseInt(oInd.value)-parseInt(oUd.value);
  oSolgt.value=parseInt(oIAlt.value)-parseInt(oRest.value);
  oSum.value=parseInt(oSolgt.value)*Pris);
}
</script>

<?
$vare = mysql_query("SELECT * FROM database ORDER BY id");
while($vis = mysql_fetch_array($vare)){
?>
<script type="text/javascript">
price["<? echo $vis[2];?>"] = <? echo $vis[3];?>;//her sættes den rigtige værdi for pris-variablen
</script>

-- og så skal kaldet gøres med henvisning til feltet selv:

<tr>
<td width='20%'><? echo $vis[2];?></td>
<td width='20%'><? echo $vis[3];?></td>
<td width='20%'><input type="text" <? echo $type; ?> size="4" value="0" name="<? echo "lager-$vis[2]";?>" onchange="Calculate(this)"></td>
Avatar billede spm Nybegynder
28. april 2008 - 18:07 #6
Den vil stadig ikke :(
Jeg har "copy&pasted" og sat ind - men den vil stadig ikke.
Den finder fint prisen. Dette kan jeg se hvis jeg vælger view source:
<form ACTION="luk.php" METHOD="post" ID="told">
<input type=hidden value="28/04/2008" name=dato>
<script type="text/javascript">
var price = [];
function Calculate(elm){
  var ident = elm.name.split("-")[1], f = elm.form;
  var oLager = f["lager-" + ident];
  var oInd = f["ind-" + ident];
  var oUd = f["ud-" + ident];
  var oIAlt = f["ud-" + ident];
  var oRest = f["rest-" + ident];
  var oSolgt = f["solgt-" + ident];
  var oSum = f["sum-" + ident];
  var Pris = price[ident];//her må du henvise til en variabel

  oIAlt.value=parseInt(oLager.value)+parseInt(oInd.value)-parseInt(oUd.value);
  oSolgt.value=parseInt(oIAlt.value)-parseInt(oRest.value);
  oSum.value=parseInt(oSolgt.value)*Pris);
}
</script>


<table border='1' width='50%'>
<tr>
<td width='20%'>vare</td>
<td width='20%'>pris</td>
<td width='20%'>Lager</td>
<td width='20%'>Indg&aring;et</td>

<td width='20%'>udg&aring;et</td>
<td width='20%'>Ialt</td>
<td width='20%'>Rest</td>
<td width='20%'>Solgt</td>
<td width='20%'>Ialt</td>
</tr>

<script type="text/javascript">
price["alm"] = 27;//her sættes den rigtige værdi for pris-variablen
</script>

<tr>

<td width='20%'>alm</td>
<td width='20%'>27</td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="lager-alm" onchange="Calculate(this)"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="ind-alm" onchange="Calculate(this)"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="ud-alm" onchange="Calculate(this)"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="ialt-alm" onchange="Calculate(this)"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="rest-alm" onchange="Calculate(this)"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="solgt-alm" onchange="Calculate(this)"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="sum-alm" onchange="Calculate(this)"></td>
</tr>


<script type="text/javascript">
price["lux"] = 30;//her sættes den rigtige værdi for pris-variablen
</script>

<tr>
<td width='20%'>lux</td>
<td width='20%'>30</td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="lager-lux" onchange="Calculate(this)"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="ind-lux" onchange="Calculate(this)"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="ud-lux" onchange="Calculate(this)"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="ialt-lux" onchange="Calculate(this)"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="rest-lux" onchange="Calculate(this)"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="solgt-lux" onchange="Calculate(this)"></td>
<td width='20%'><input type="text" ENABLED size="4" value="0" name="sum-lux" onchange="Calculate(this)"></td>
</tr>
...

Men når jeg skriver i felterne sker der ingen beregninger :(
Avatar billede w13 Novice
28. april 2008 - 18:24 #7
Hmm. Muligvis skal du rette alle onchange til onblur eller onkeyup alt efter, hvad du synes er fedest.
Avatar billede roenving Novice
28. april 2008 - 18:28 #8
onchange udføres, når feltet mister focus efter indtastning ...

-- og så er der en overflødig parantes-slut:

...
  oSum.value=parseInt(oSolgt.value)*Pris;
}

-- og så er en af felterne navngivet forkert:

...
  var oUd = f["ud-" + ident];
  var oIAlt = f["ialt-" + ident];
  var oRest = f["rest-" + ident];
...

-- så scriptet kommer til at se sådan ud:

<script type="text/javascript">
var price = [];
function Calculate(elm){
  var ident = elm.name.split("-")[1], f = elm.form;
  var oLager = f["lager-" + ident];
  var oInd = f["ind-" + ident];
  var oUd = f["ud-" + ident];
  var oIAlt = f["ialt-" + ident];
  var oRest = f["rest-" + ident];
  var oSolgt = f["solgt-" + ident];
  var oSum = f["sum-" + ident];
  var Pris = price[ident];//her må du henvise til en variabel

  oIAlt.value=parseInt(oLager.value)+parseInt(oInd.value)-parseInt(oUd.value);
  oSolgt.value=parseInt(oIAlt.value)-parseInt(oRest.value);
  oSum.value=parseInt(oSolgt.value)*Pris;
}
</script>
Avatar billede spm Nybegynder
28. april 2008 - 20:40 #9
Så virker det satme!! Tak du store javascript-guro :)

Smid et svar!
Avatar billede roenving Novice
28. april 2008 - 21:05 #10
Oki, det passer jo fint med en deler '-)
Avatar billede olebole Juniormester
29. april 2008 - 00:46 #11
<ole>

- alle guruers gyro  ;o)

/mvh
</bole>
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