<?php // kleurtjes
function CheckBalance(form1, balance, maxid) {
var total = 0;
for (var i=1; i <= maxid; i++) {
var elem_name = 'subtotal_'+i;
var elementI = document.getElementById(elem_name);
if (elementI != null) {
var subtotal = elementI.innerHTML.substr(1);
total += subtotal;
}
}
total = number_format(total, 2, '.', ',');
if (total > balance) {
alert('You don\'t have enough money to buy all of this!');
}
else {
document.getElementById('total').innerHTML = '<strong>Total</strong> $'+total;
}
}
<?php// kleurtjes
function CheckBalance(form1, balance, maxid){
var total =0;
for(var i=1; i <= maxid; i++){
var elem_name ='subtotal_'+i;
var elementI = document.getElementById(elem_name);
Hij doet redelijk goed wat 'ie moet doen, maar zodra het aantal producten niet gelijk is aan het hoogste ID werkt het niet.
Hoe kan ik deze functie dus aanpassen dat 'ie alle divs waar van het id begint met 'subtotal_', ongeacht het getal dat er achter staat, bij elkaar opteld.
Ik geef nu het aantal producten mee, maar dat aantal hoeft niet per se te stroken met het hoogste getal dat er achter 'subtotal_' staat.
Dat er een '$' in de div staat maakt niet uit, die filter ik eruit.
Prima, ik denk dat 't daar wel mee gaat lukken.
Hartstikke bedankt Boukefalos
Ik heb nu geen tijd om 'm te proberen (moet gaan leren voor de proefwerkweek), maar morgenvroeg heb ik wel even tijd.
Het is dus niet gelukt.. Hij vindt het goede veld niet, zo ziet mijn functie er nu uit:
Ik heb de laatste regel 'weggelaten', want die gaf nog een error.
Die 'document.write' staat er om te kijken wat 'ie vindt.
Daar gaat het ook fout, want met substr(0,8) vindt 'ie 'subtotal' zoals het moet, maar hij plankt er automatisch nog 'total' achter. Dus dan krijg je subtotaltotal. Doe ik substr(0,3), dan krijg ik subtot eruit.
Als ik de substr weglaat in de document.write, dan komt er subtotal5total uit (5 is hier het productid).
Met deze regel roep ik de functie aan:
CheckBalance('shop', '{money}', 'subtotal', 'total');
Dat met substr(0, start.length) had ik oorspronkelijk ook, maar dit was om te testen. Ik probeer mn functies zo universeel mogelijk te houden, zodat ik ze later kan 'hergebruiken'.
De geparste HTML van de shop:
Dit is uiteraard niet alle html, maar alleen het relevante deel.
Edit
Ik heb 't opgelost, heb 'm iets anders gedaan, aangezien 'onchange=' niet in het form-element mag staan volgens de xHTML regels.
Dit zijn mijn functies nu:
<? // kleurtjes!! :D
function ShopTotal() {
elems = document.getElementById('shop').getElementsByTagName('div');
var total = 0;
for (var i=0; i < elems.length; i++) {
if (elems[i].id.substr(0,8) == 'subtotal') {
var subtotal = elems[i].innerHTML.substr(1);
total += subtotal;
}
}
total = number_format(total, 2, '.', ',');
document.getElementById('total').innerHTML = '<strong>Total</strong> $'+total;
}
function Subtotal(amount, productid, price) {
var subtotal = amount*price;
subtotal = number_format(subtotal, 2, '.', ',');
var div = 'subtotal'+productid;
document.getElementById(div).innerHTML = "$"+subtotal;
ShopTotal();
}
function CheckBalance (balance, div) {
var content = document.getElementById(div).value;
var cost = content.innerHTML.substr(23);
var ret = true;
if (cost > balance) {
alert('You don\'t have enough money to buy all these stuff.');
ret = false;
}
else {
ret = true;
}
return ret;
}
Edit 2:
Trouwens, nog ff een vraagje, hoe kan je in JavaScript optionele parameters opgeven?
Ik heb een number_format functie, en daar wil ik standaard dat de 3e en 4e parameter op respectievelijk '.' en ',' staan. Als ik dit doe:
function number_format(int, decimals, dec_sep='.', thousand_sep=',') {}
krijg ik een error. Als ik er iets anders van maak (=0, =null) krijg ik ook een error.