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?
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
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.