Gunnar Bittersmann: Variable in Javascript übergeben bei dynamischen Inputfeldern

Beitrag lesen

@@Lynnv

Nun möchte ich, dass per Javascript mit onkeyup die Werte einer Zeile addiert werden.

Wie im anderen Thread gerade gesagt wurde, ist keyup das falsche Event.


Im Internet habe ich einen Code gefunden, mit dem es bei einfachen Inputfeldern funktioniert

Welcher unzählige Fehler enthält und nicht funktioniert.

<div style="width:100px;float:left">           
  1x<br> Fingerlinge
  <input style="max-width:70px; max-height:12px" min="0" type='number' onkeyup="calculate()" name='B8[<?php echo $index?>]' value='<?php echo $B8?>'/>            
</div>

Das Eingabefeld hat keine Beschriftung. Das „funktioniert“ nur für Nutzerinnen, die die Seite visuell wahrnehmen und das in der Nähe stehende „1x Fingerlinge“ als Beschriftung zuordnen. Für alle anderen Nutzerinnen funktioniert das nicht.

Alle Eingabefelder müssen ein label haben, bspw. so:

<label style="width:100px;float:left">           
  1x<br> Fingerlinge
  <input style="max-width:70px; max-height:12px" min="0" type="number" onkeyup="calculate()" name="B8[<?php echo $index?>]" value="<?php echo $B8?>"/>           
</label>

oder mit for und ID:

<div style="width:100px;float:left">           
  <label for="B8[<?php echo $index?>]">1x<br> Fingerlinge</label>
  <input style="max-width:70px; max-height:12px" min="0" type="number" onkeyup="calculate()" id="B8[<?php echo $index?>]" name="B8[<?php echo $index?>]" value="<?php echo $B8?>"/>
</div>

Das „1x“ verstehe ich da nicht. Im Übrigen ist ein x kein Malzeichen – das sieht so aus: ×. Wer sich das nicht aus der Zeichentabelle raussuchen möchte, kann in HTML auch &times; verwenden.

Die Anführungszeichen hab ich mal vereinheitlicht. Du kannst in HTML ' oder " verwenden; es ist aber kein guter Stil, beides zu mischen.

Zu gutem Stil gehört auch, sämtliche Angaben zur Darstellung im Stylesheet unterzubringen, nicht inline in style-Attributen.

Wo kommen die Werte $index und $B8 her? Prinzipiell sind alle Daten als potentiell gefährlich anzusehen und müssen beim Kontextwechsel entsprechend behandelt werden – beim Einbringen in HTML mit htmlspecialchars():

<?php echo htmlspecialchars($index) ?> und
<?php echo htmlspecialchars($B8) ?>

(Wofür du auch kurz <?= htmlspecialchars($index) ?> und
<?= htmlspecialchars($B8) ?> schreiben kannst.)

Da kommt dann sowas wie name="B8[1]" raus, nicht wahr?

 	input11 = parseFloat( document.Bestellungen.B8[1].value.replace(/,/ , ".") );

Nö, [/] haben in JavaScript eine (mehrere?) Sonderbedeutung. Hier wäre es, auf das zweite(!) Element des Arrays B8 zuzugreifen. Ach, B8 ist gar kein Array, sondern ein String? Dann liefert B8[1] das zweite Zeichen des Strings.

Das willst du nicht, sondern 'B8[1]' als String. Dann musst du nicht die Schreibweise mit ., sondern die mit [/] verwenden: document.Bestellungen['B8[1]']. Oder (IMHO besser lesbar) document.Bestellungen.elements['B8[1]'].

Die [/] im Namen des Eingabefeldes verwendest du wegen der serverseitigen Auswertung des Formulars?

😷 LLAP

--
Wenn der Faschismus wiederkehrt, wird er nicht sagen: „Hallo, ich bin der Faschismus.“ Er wird sagen: „Hört auf zu zählen! Ich habe gewonnen!“