10. juni 2007 - 16:55Der er
29 kommentarer og 1 løsning
Funktion i onchange dur ik så godt
Hey.
I min php variabel $_SESSION['cart'] har jeg et array med en indkøbskurv. Jeg vil gerne have javascript til at lægge alle tal sammen fra priserne på de enkelte vare i indkøbskurven "on the fly" (derfor javascript, da php skal refreshe siden :/ ). Men det fungerer ikke så godt. Jeg har følgende kode:
Funktionen som udfører sammenlægningen: <script type="text/javascript"> <!--
function sumPrice() { var total; var array = <?php print $_SESSION['cat']; ?>;
foreach(var key in array) { total = total + parseInt(document.getElementById('price'+key).value); }
return total; }
--> </script>
Min onchange ting: <select name="wee" onchange="document.getElementById('total').value = sumPrice();"
/* indsæt selv resten af min select her (som fungerer :) /*
Længere nede har jeg så et textfelt med id="total". Men når jeg ændrer i min select, så gør den ingenting. Jeg har nogle flere javascriptfunktioner bag ovenstående i min onchange, som fungerer fint hvis ikke jeg kalder den funktion. Hvor går det galt? Hvis jeg prøver at lave en alert('') øverst i funktionen, for at teste, så kommer den heller ikke frem - altså kommer den (vist) ikke engang frem til funktionen?
array er et reserveret ord, men som erik skriver, _burde_ det ikke i den sammenhæng give problemer, det er bare dumt alligevel !-)
-- pprøv at vise den kode. der rammer browseren, for der kan tænkes en hel del fejl, måske skal du:
var total = 0; var cats = [<?php print implode($_SESSION['cat'],","); ?>]; foreach(var key in cats){ total += parseInt(document.getElementById('price'+key).value); }
Når jeg skriver foreach så vil den absolut ingenting :) Men hvis jeg bruger for i stedet for foreach, så kører den (næsten). Den lægger i hvert fald nogle tal sammen og ændrer min total efter, hvad jeg ændrer i min select. Jeg kan bare ikke lige se logikken i det :p :)
Jeg prøver lige at lege med det i to sekunder, så vender jeg lige tilbage :)
erikjacobsen - den ser sådan her ud nu:
<script type="text/javascript"> <!--
function sumPrice() { var total = 0; var cats = [<?php print implode($_SESSION['cat'],","); ?>];
for (var key in cats) { total += parseInt(document.getElementById('price'+key).value); }
function sumPrice() { var total = 0; var cats = [Array,Array,Array];
for (var key in cats) { total += parseInt(document.getElementById('price'+key).value); }
return total; }
--> </script>
MEEEEEEEEN! (nu skal i grine af mig og tænke "hvor sødt"):
Som nævnt tidligere, så har jeg en del andre JS funktioner i min onchange. Bl.a. den, som opdaterer mit 'price'+key felt med den nyeste værdi. Hvis jeg sætter min sumPrice bagerst i min onchange, så opdaterer den total feltet EFTER, at jeg har givet alle mine price felter deres nye værdier - og så virker det :)
Så selvom, at der står [Array,Array,Array] (hvilket jeg slet ikke aner hvorfor eller om er rigtigt), så ser det faktisk ud til at virke ret godt nu! :) (crashtester det dog lige :))
der er sådan en for hvert element i mit array - og for hvert element i mit array, så er der et price felt. Pricefeltet for ovenstående vil så hedde price0 :)
Igen - dunno how or why, men det virker nu :) hehe...
ja, det er prod_price som står i mine price felter. Men det er ikke sikkert, at det er price0, price1, price2, price3 osv - altså at de er i den rækkefølge. Det kan godt være, at det er price2, price3, price5, price77 osv. Rækkefølgen er ikke sikker, desværre :/
Men du kan få hele afsnittet af kode som har været omtalt så. Så kan du også se, at jeg i min PHP bruger en foreach i stedet for en for, da keys i $_SESSION['cat'] ikke altid er 0, 1, 2, 3 osv., men godt kan variere.
<script type="text/javascript"> <!--
function sumPrice() { var total = 0; var cats = [<?php print implode($_SESSION['cat'], ","); ?>];
for (var key in cats) { total += parseInt(document.getElementById('price'+key).value); }
return total; }
--> </script>
<?php //Viser indhold af kurv if(count($_SESSION['cat']) > 0) { foreach($_SESSION['cat'] AS $key => $cat) { $q = mysql_query("SELECT prod_name, prod_time_standard, prod_time_min, prod_time_max, prod_price FROM sg_products WHERE prod_id='".$_SESSION['cat'][$key]['prod_id']."'") or die(mysql_error()); $p = mysql_fetch_assoc($q);
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.