Automatisch optellen script js

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mike Z

Mike Z

06/06/2012 19:52:13
Quote Anchor link
hi,
ik heb nu dit script je gevonden op internet maar ik heb er een vraagje over. Ik ben nou niet echt geweldig met js dus kan iemand mij uitleggen wat er gebeurd vanaf $form.delegate? En dan bedoel ik van wat al die functies doen en wat het gevolg er van is.

Alvast bedankt!

HTML:
<form id="missies">
<label>This one is used: <input class="getal"/></label>
<br/>
<label>So is this one: <select class="getal">
<option>5</option>
<option>10</option>
<option>15</option>
</select></label>
<br/>
<label>This one is ignored: <input class="ignore"/></label>
<br/><br/>
<p>Total: <span id="kans"/></p>
</form>

JS:
var $form = $('#missies'),
$getallen = $form.find('.getal'),
$sumDisplay = $('#kans');

$form.delegate('.getal', 'change', function ()
{
var sum = 0;
$getallen.each(function ()
{
var value = Number($(this).val());
if (!isNaN(value)) sum += value;
});

$sumDisplay.text(sum);
});
 
PHP hulp

PHP hulp

05/05/2024 06:59:58
 
Erwin H

Erwin H

06/06/2012 20:05:54
Quote Anchor link
$form.delegate('.getal', 'change', function ()
Deze regel definieert een eventhandler voor alle elementen met de class 'getal', voor het event 'change'. Dus elke keer dat een element met die class verandert wordt de callback functie aangeroepen.

$getallen.each(function ()
Dit is een loop (als de php foreach loop) die door alle element in de array $getallen gaat. voor elk element in de array wordt de callback functie aangeroepen.

var value = Number($(this).val());
De variabele value krijgt de waarde van het huidige element in de each loop.

if (!isNaN(value)) sum += value;
Als value nu een getal is (isNaN staat voor 'is Not a Number en geeft true als het geen getal is), dan wordt de waarde opgeteld bij sum.

$sumDisplay.text(sum);
sum wordt in het element $sumDisplay geplaatst. Dat is het element met de id 'kans'.

Ik hoop dat dit een beetje duidelijk is.
Gewijzigd op 06/06/2012 20:06:11 door Erwin H
 
Mike Z

Mike Z

06/06/2012 20:59:45
Quote Anchor link
Bedankt voor je snelle reactie het is me nu helemaal duidelijk! Ik heb nu als invoerveld nu dit:
<td><input type="text" name="soldaat" class="getal" size="5" /></td>
<td><input type="text" name="antitank" class="getal" size="5" /></td>
<td><input type="text" name="humvee" class="getal" size="5" /></td>
<td><input type="text" name="tank" class="getal" size="5" /></td>
<td><input type="text" name="heli" class="getal" size="5" /></td>
<td><input type="text" name="vliegtuig" class="getal" size="5" /></td>
<td colspan="2">Kans: <span id="kans"/>%</td>

Nu wil ik zeg maar de 'sum' bereken door middel van een php functie die gebruik maakt van $(zie names in <input> oftewel 6 stuks). Ik neem aan dat ik van de name een var moet maken maar wat kan ik nu van de js code weglaten en waar moet ik die php functie neerzetten?
 
Erwin H

Erwin H

06/06/2012 21:17:50
Quote Anchor link
php = server
js = browser

Als je alles al in php doet kan je dus de hele js weglaten.
 
Mike Z

Mike Z

06/06/2012 21:34:05
Quote Anchor link
Ik weet het maar ik wil dat die sum direct weergeven wordt als je die velden invult net zoals dat in dat js script gebeurt (dus zonder knopje/link enz.) en dat kan toch niet in php?
 
Erwin H

Erwin H

06/06/2012 21:48:32
Quote Anchor link
Mike dede op 06/06/2012 20:59:45:
Nu wil ik zeg maar de 'sum' bereken door middel van een php functie

Mike dede op 06/06/2012 21:34:05:
ik wil dat die sum direct weergeven wordt als je die velden invult net zoals dat in dat js script gebeurt (dus zonder knopje/link enz.) en dat kan toch niet in php?

Wat wil je nu? Misschien iets beter uitleggen, want eerst wil je het met een php functie, en dan weer niet.
 
Mike Z

Mike Z

06/06/2012 22:12:15
Quote Anchor link
Ok dit wil ik dus: Ik heb een functie gemaakt in php die een percentage berekent. Ik ben zoals ik eerder al zei geen held in javascript dus ik weet niet hoe ik die kan/moet omzetten omdat er verschillende variabelen in worden gebruikt en ik weet niet hoe ik dat dan in js moet doen. Nu wil ik dus hetzelfde als het script dat ik in de topic gaf alleen dan dat hij werkt met mijn geschreven functie en een andere opbouw (zie mn eerdere post).
 
Erwin H

Erwin H

06/06/2012 22:17:51
Quote Anchor link
Dat kan dus niet, want php werkt op de server, js in de browser. Je kan die twee niet door elkaar gooien.
Dus bedenk eerst of je het server side kan doen. Zo nee, dan zal het dus helemaal in js moeten.
 
Mike Z

Mike Z

06/06/2012 22:27:50
Quote Anchor link
Dan wordt het dus js maar dan kom ik dus terug op een eerdere vraag: Wat mag ik dan in de js weglaten? Ik dacht zelf dat ik dan mijn variabelen uit mijn php (omgezet naar js uiteraard) ipv $form.delegate('.getal', 'change', function () en $getallen.each(function () moet doen klopt dit?
 
Erwin H

Erwin H

07/06/2012 09:24:00
Quote Anchor link
Je kan geen php en js mixen. Dus 'variabelen uit mijn php' in js gebruiken gaat niet lukken!
 
Gerhard l

gerhard l

07/06/2012 09:46:11
Quote Anchor link
Erwin H op 07/06/2012 09:24:00:
Je kan geen php en js mixen. Dus 'variabelen uit mijn php' in js gebruiken gaat niet lukken!

Opzich klopt deze opmerking, maar voor de duidelijkheid je kan wel de waardes van de variabelen gebruiken als value voor javascript. Dus stel je voor je haalt in je php een percentage uit de database en zet deze in $iPercentage dan kan je deze wel gebruiken in javascript door te zeggen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
var doehierietsmee("<?=$iPercentage?>");
// even heel simpel:
alert(doehierietsmee);
Gewijzigd op 07/06/2012 09:47:03 door gerhard l
 
Erwin H

Erwin H

07/06/2012 09:59:41
Quote Anchor link
Strikt genomen gebruik je dan de waarde van de variabelen in js, niet de variabelen zelf. Dat kan wel inderdaad.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.