array-formularelemente auswerten
Steffi
- javascript
Hallo!
ich habe da ein kleines Problem mit einem Script..
es handelt sich dabei um einen Mini-Shop.
Es werden Produkte aus einer Datenbank ausgelesen.
Wenn Produkte ausgewählt werden (Checkboxen), wird die Summe der Preise per Javascript in einem Text-Feld aktualisiert..
Als die Checkboxen noch produkt_1, produkt_2 etc. hiessen, war auch alles wunderbar und funktionierte.
Codeschnipsel:
if (document.bestellung.produkt_1.checked) {
Cost = Cost + 1000.00;
}
Aber als ich aus diversen Gründen auf Arrays umstiegt (produkt[1], produkt[2]) und den Code anpasste:
if (document.bestellung.produkt[1].checked) {
Cost = Cost + 250.00;
}
klappte das nicht mehr...
Fehlermeldung: "document.bestellung.produkt.1 ist kein Objekt"
Meine Vermutung ist, ich muss irgendwie eval() benutzen, oder??? und wenn ja, wo und wie?? (mir fehlt leider die Erfahrung mit JavaScript)
Für Ideen wäre ich echt dankbar!! :o)
Steffi
Hi Steffi,
bist Du dir sicher, daß "250.00" nicht die Fehlerquelle ist? Ich weiß nicht genau, ob der Punkt hier auch wirklich als Dezimaltrenner funktioniert. Versuch's doch mal nur mit "250".
Gruß,
Valadan
Hallo!
Nein, das ist es leider nicht, denn das ging ja vorher auch wunderbar..
trotzdem danke!
Hi!
» Codeschnipsel:
if (document.bestellung.produkt_1.checked) {
Cost = Cost + 1000.00;
}
Da war das HTML etwa so, schätze ich:
<input type="checkbox" name="produkt_1" ...>
Aber als ich aus diversen Gründen auf Arrays umstiegt (produkt[1], produkt[2]) und den Code anpasste:
if (document.bestellung.produkt[1].checked) {
Cost = Cost + 250.00;
}
Tja und da? Du kannst schlecht ein Array als Namen geben:
<option type="checkbox" name="produkt[1]"....
for (var i = 0; i < ZahlAllerKästchen; i++)
{
eval ("if document.bestellung.produkt[" + i + "].checked) Cost = Cost + 250;");
}
Irgendwie habe ich das Gefühl es geht auch ohne eval und schöner, aber es fällt mir nicht ein. Es geht definitiv mit getElementByName, aber das können alte Browser nicht.
klappte das nicht mehr...
Fehlermeldung: "document.bestellung.produkt.1 ist kein Objekt"
Da hat er recht, was ich sage. Der Name ist ja nicht so: name="produkt.1" (obs so geht, ich glaub nicht, wär aber genial)
Meine Vermutung ist, ich muss irgendwie eval() benutzen, oder??? und wenn ja, wo und wie?? (mir fehlt leider die Erfahrung mit JavaScript)
Hoffe es hilft.
gruß
sven
Hi Sven - vielen lieben dank .. aber..
Tja und da? Du kannst schlecht ein Array als Namen geben:
<option type="checkbox" name="produkt[1]"....
naja eigentlich schon...
lässt sich auch so schön mit php verarbeiten....
for (var i = 0; i < ZahlAllerKästchen; i++)
{
eval ("if document.bestellung.produkt[" + i + "].checked) Cost = Cost + 250;");
}
so hab ich es irgendwie auch nicht hinbekommen :-(
Da hat er recht, was ich sage. Der Name ist ja nicht so:
name="produkt.1" (obs so geht, ich glaub nicht, wär aber genial)
naja, das "produkt.1" ist, was der browser aus produkt[1] macht.. sauhund.. :o)
Hoffe es hilft.
mmm noch nicht so richtig.. mag aber an mir liegen, Javascript ist nicht mein Lieblings-Gebiet.
hi,
Aber als ich aus diversen Gründen auf Arrays umstiegt (produkt[1], produkt[2]) und den Code anpasste:
if (document.bestellung.produkt[1].checked) {
Cost = Cost + 250.00;
}
test mal "document.bestellung[produkt[1]].checked", denn "produkt[1]" liefert ja vermutlich einen string, oder?
Gruesse Joachim
.. hallo Joachim..
danke, aber klappt auch nicht...
ich poste jetzt mal den PHP-Code, der den HTML- und JavaScript-Quellcode generiert
der javascript-teil der funktion summieren():
$res = mysql_db_query("ict_analyst", "select id from produkte where online = 1 order by bezeichnung");
while ($row=mysql_fetch_array($res)) {
echo "if (document.bestellung.produkt[$row[id]].checked) Cost = Cost + $row[preis]; \n";
}
der html-Schnippel an anderer Stelle:
$res = mysql_db_query("ict_analyst", "select * from produkte where online = 1 order by bezeichnung");
while($row = mysql_fetch_array($res)) {
if($row[preis] != 0) {
$preis = "EUR " . $row[preis];
} else {
$preis = "frei";
}
echo "<TR><TD WIDTH=16>
<P><INPUT TYPE=CHECKBOX NAME="produkt[$row[id]]" VALUE="$row[preis]" onClick="summieren()"> </TD>
<TD WIDTH=642>
<P>$row[bezeichnung]</P>
</TD>
<TD WIDTH=112>
$preis
</TD>
</TR>";
} // while
mit eval hab ich es bisher auch noch nicht hinbekommen..