26. oktober 2010 - 20:36 Der er 14 kommentarer og
1 løsning

onchange - medfoere den aendrede vaerdi.

Jeg har en formular hvor der indfoeres en raekke tal og et totalfelt hvor jeg gerne loebende vil have summen af de hidtil indfoerte tal.  Det burde kunne loeses med lidt javascript og onChange der sender det sidst indfoerte tal til en function hvor det laegges til den hidtidige sum og, ved hjaelp af innerHTML placeres i totalfeltet.  Jeg har proevet med den foelgende kode, men jeg faar ikke den aendrede vaerdi med.  Hvordan indfanger jeg den aendrede vaerdi og faar den sendt til funktionen?

<script>
function sumup(tal)
{
var sum = document.getElementById('total').innerHTML
sum = sum + tal
document.getElementById('total').innerHTML = sum
}
</script>

<form action='' method="FORM'>
<input type='text' name='tal1' onChange = sumup('tal1') />
<input type='text' name='tal2' onChange = sumup('tal2') />
<input type='submit' name='submit' />
</form>

<td id = 'total'>0</td>
Avatar billede nicklasw Nybegynder
26. oktober 2010 - 21:21 #1
Du skal ikke bruge inderhtml men value

<script>
function sumup(tal)
{
var sum = document.getElementById('total').value
sum = sum + tal
document.getElementById('total').value = sum
}
</script>

<form action='' method="FORM'>
<input type='text' name='tal1' onChange = sumup('tal1') />
<input type='text' name='tal2' onChange = sumup('tal2') />
<input type='submit' name='submit' />
</form>

<td id = 'total'>0</td>
Avatar billede nicklasw Nybegynder
26. oktober 2010 - 21:25 #2
Sorry, jeg læste ikke din kode rigtigt. glem mit svar ;)
Avatar billede Slettet bruger
26. oktober 2010 - 21:56 #3
Fra dine onChange-events kalder du funktionen sumup med parametrene 'tal1' og 'tal2'. I funktionen lægger du så parametret til summen. Så kan du selv lige tænke over hvad der sker når man lægger 'tal1' til 42 :)
26. oktober 2010 - 22:55 #4
kimsey0, jeg gaar ud fra (haaber) at du proever at give mig positiv hjaelp.  Mener du at jeg skal erstatte 'tal1' med tal1?  Det har jeg proevet, men det resulterer ikke i at jeg faar vaerdien frem til funktionen.  Ved du (positivt) hvordan jeg indfanger vaerdien af det tal der indfoeres in inputten og faar den frem til funktionen?
Avatar billede Slettet bruger
26. oktober 2010 - 23:14 #5
Jeg beklager meget hvis det ikke virkede som om jeg prøvede at hjælpe dig. Jeg antog (åbenbart fejlagtigt) at du selv havde skrevet koden, og at du derfor ville forstå hvad jeg mente, men jeg kommer da også gerne bare med noget kode der løser dit problem:

<script>
var sum = 0;

function sumup(element)
{
tal = document.getElementById(element).value;
sum += tal;
document.getElementById('total').value = sum;
}
</script>


<form action='' method="FORM'>
<input type='text' name='tal1' onChange='sumup(this)' />
<input type='text' name='tal2' onChange='sumup(this)' />
<input type='submit' name='submit' />
</form>


<td id='total'>0</td>


Værsgo :)
27. oktober 2010 - 07:04 #6
kimsey, tak for det konkrete forslag til hjaelp.  Men jeg kan ikke faa det til at virke.  Naar jeg, med din kode, har indfoert et tal i det foerste input felt og saa klikker et andet sted forventede jeg at se det indfoerte tal vise sig i total feltet, men der sker ingenting.  For test formaal indsatte jeg saa oeverst i funktionen disse linier:

document.write("I FUNKTIONEN")
document.write(element)

Naar jeg saa har indfoert et tal i det foerste inputfelt og klikker et andet sted faar jeg skrevet "I FUNKTIONEN".  Saa ved jeg at onChange i sig selv virker.  Men jeg faar ingen vaerdi udskrevet for element.  Hvis jeg saa, igen for test, aendrer 'sumup(this)' til 'sumup(25)' saa faar jeg udskrevet "I FUNKTIONEN25" naar jeg indfoerer et tal input feltet og klikker et andet sted.

Min konklusion maa vaere at onChange = 'sum(et eller andet)' er et trin i den rigtige retning, men at det ikke er 'sumup(this)' der indfanger tallet i input feltet.

Eller er det noget der SKAL virke (tester korrekt hos dig?) saaledes at jeg maa have lavet noget forkert?

(<form action='' method='FORM'> skal naturligvis vaere method='POST')
Avatar billede Slettet bruger
27. oktober 2010 - 08:55 #7
Beklager, jeg havde ikke testet koden, og havde desuden også skrevet den "ufornuftigt". Dette her virker:

<script>
var sum = 0;

function sumup(tal)
{
tal = parseInt(tal);
sum += tal;
document.getElementById('total').innerHTML = sum;
}
</script>



<form action='' method='post'>
<input type='text' name='tal1' onChange='sumup(this.value)' />
<input type='text' name='tal2' onChange='sumup(this.value)' />
<input type='submit' name='submit' />
</form>


<td id='total'>0</td>
Avatar billede majbom Novice
27. oktober 2010 - 09:02 #8
prøv med:

<script type="text/javascript">
var sum = 0;

function sumup(element)
{
tal = element.value;
sum = parseInt(sum) + parseInt(tal);
document.getElementById('total').firstChild.nodeValue = sum;
}
</script>
Avatar billede Slettet bruger
27. oktober 2010 - 09:33 #9
Brug den her linje fra splazz' script, da den er mere korrekt:

document.getElementById('total').firstChild.nodeValue = sum;
27. oktober 2010 - 11:23 #10
Jeg takker for indlaeg.  Jeg har nu stykket en loesning sammen, stort set ved brug af kimsey0's #7.  Men jeg takker alle for interesse og input.

For det foerste ved jeg nu at jeg fanger vaerdien af det jeg indsaetter i inputten ved this.value .

For det andet ankommer vaerdien til funktionen som en string der med parseInt(tal) omsaettes til en Integer som jeg kan regne med.

Og saa har jeg med megen eksperimentering her til morgen fundet ud af <p> og mange andre elementer tager innerHTML let og smaertefrit men ikke <id> hvor man skal bruge mere komplicerede konstruktioner (saasom #8/9).  Men der er egenlig ingen grund til at den loebende total skal sidde i en <id>.

Nedenstaaende kode virker i mit system.  Hurra.  Kimsey0, opret venligst et svar for points.

<script type="text/javascript">
var sum = 0;
function sumup(tal)
{
  tal = parseInt(tal);
  sum += tal;
  document.getElementById('total').innerHTML = sum;
}
</script>
<head>

<body>
<form action='' method='POST'>
<input type='text' name='tal1' onChange = 'sumup(this.value)' /><br/>
<input type='text' name='tal2' onChange = 'sumup(this.value)' /><br/>
<input type='submit' name='submit' />
</form>
<p id='total'>0 </p>
Avatar billede majbom Novice
27. oktober 2010 - 11:49 #11
ikke fordi at dit script ikke er korrekt, men du bør undgå brugen af innnerHTML og benytte dig af DOM-elementerne, som jeg brugte i mit eksempel...
Avatar billede Slettet bruger
28. oktober 2010 - 21:44 #12
#11, jeg er så enig, så enig, hvilket jeg også gjorde opmærksom på i #9.
Avatar billede majbom Novice
28. oktober 2010 - 22:11 #13
ved ikke om du også ville have svar fra mig, men her er et, så kan du gøre med det hvad du vil ;)
28. oktober 2010 - 23:16 #14
Jeg foretraekker at betragte Eksperten som hjaelp til selvhjaelp.  Den endelige loesning paa problemet i denne traad har jeg selv udarbejdet (og derfor maksimeret min indlaering), men baseret omkring 90% paa input fra kimsey0.  Det er grunden til min pointgivning.  splazz, jeg vaerdsaetter dine indlaeg, men i denne traad, 'fair enough'?
Avatar billede majbom Novice
29. oktober 2010 - 08:25 #15
fint fint - jeg var bare ikke sikker ud fra din kommentar omkring svar-lægning :)
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