Hey Gemeinde,
ich habe nach unzähligen Google-Attacken in diversen Foren immer noch keine Lösung für mein Problem gefunden. Ich hoffe ich komme durch Euer Wissen auf einen grünen Pfad.
Kurz zur Erklärung:
Ich habe ein Formular welches durch Eingabe einer zuvor selbst gewählten Bezeichnung (Artikelcode o.ä.) im ersten Feld den Rest via Ajax nachlädt. Bedeutet ich gebe im ersten Feld als Beispiel "A123" ein, lädt es den Nettopreis und die Bezeichnung aus mySQL in die zugehörigen Felder. Funktioniert auch super. Nach Eingabe der Menge im entsprechenden Feld gibt es auch über Javascript den Gesamtpreis im letzten Feld aus. Funktioniert auch anstandsfrei. Da ich nicht weiß wieviel Posten der Nutzer am Ende hat, kann er sich über einen Button eine neue Zeile hinzufügen für den nächsten Artikel. Das habe ich über Javascript gelöst. (siehe Quellcode). Mein Problem ist, dass Ajax in der neu erstellten Zeile nichts ausfüllt wenn man im ersten Feld (Code) die Artikelbezeichnung eingibt. Die erste Zeile für den ersten Artiekl ist fixes html, also nicht über Javascript erzeugt. Nur dort lädt Ajax die Daten nach, im per Javascript erzeugten Code nicht. Woran liegt das? Habe ich etwas nicht beachtet?
Die html:
Die ajax.php:
....und so weiter.
Die stmmaction2.php:
Wie bereits erwähnt funktioniert die Konstruktion ja bereits, jedoch nur im fixen html-Teil.
Am Ende möchte ich es noch so gestalten, dass ich nicht für jeden Artikel ein Script haben möchte, da ich ja selbst nicht weiß wieviel Artikel der Nutzer anlegen möchte. Hinweise auf Anfängerfehler sind gern willkommen, ich bin Neuling auf diesem Gebiet.
Danke vorab
ich habe nach unzähligen Google-Attacken in diversen Foren immer noch keine Lösung für mein Problem gefunden. Ich hoffe ich komme durch Euer Wissen auf einen grünen Pfad.
Kurz zur Erklärung:
Ich habe ein Formular welches durch Eingabe einer zuvor selbst gewählten Bezeichnung (Artikelcode o.ä.) im ersten Feld den Rest via Ajax nachlädt. Bedeutet ich gebe im ersten Feld als Beispiel "A123" ein, lädt es den Nettopreis und die Bezeichnung aus mySQL in die zugehörigen Felder. Funktioniert auch super. Nach Eingabe der Menge im entsprechenden Feld gibt es auch über Javascript den Gesamtpreis im letzten Feld aus. Funktioniert auch anstandsfrei. Da ich nicht weiß wieviel Posten der Nutzer am Ende hat, kann er sich über einen Button eine neue Zeile hinzufügen für den nächsten Artikel. Das habe ich über Javascript gelöst. (siehe Quellcode). Mein Problem ist, dass Ajax in der neu erstellten Zeile nichts ausfüllt wenn man im ersten Feld (Code) die Artikelbezeichnung eingibt. Die erste Zeile für den ersten Artiekl ist fixes html, also nicht über Javascript erzeugt. Nur dort lädt Ajax die Daten nach, im per Javascript erzeugten Code nicht. Woran liegt das? Habe ich etwas nicht beachtet?
Die html:
HTML-Code:
<form name="formu" id="formu" action="angeboterstellen.php" method="post"> <div id='TextBoxesGroup'> <div id="TextBoxDiv1"> <label>Position 1 : </label><input type="text" id="code" name="code" class="form-control" placeholder="Artikel 1" autocomplete="off" > <input type="text" id="bezeichnung1" name="bezeichnung1" class="form-control" placeholder="Bezeichnung" readonly> <input type="text" id="preisnetto1" name="preisnetto1" class="form-control" placeholder="Preis Netto" readonly > <input type="text" id="anzahl1" name="anzahl1" class="form-control" placeholder="Anzahl" > <input type="text" id="gesamt1" name="gesamt1" class="form-control" placeholder="Gesamt Netto" readonly ><div id="error1"></div> </div> <script type="text/javascript"> $(document).ready(function(){ var counter = 2; $("#addButton").click(function () { if(counter>500){ alert("Es sind nur 500 Positionen möglich."); return false; } var newTextBoxDiv = $(document.createElement('div')) .attr("id", 'TextBoxDiv' + counter); newTextBoxDiv.after().html('<label>Position '+ counter + ' : </label>' + '<input type="text" name="code' + counter + '" id="code' + counter + '" placeholder="Artikel ' + counter + '" > ' + ' <input type="text" name="bezeichnung' + counter + '" id="bezeichnung' + counter + '" placeholder="Bezeichnung" readonly > ' + ' <input type="text" name="preisnetto' + counter + '" id="preisnetto' + counter + '" placeholder="Preis Netto" readonly > ' + ' <input type="text" name="anzahl' + counter + '" id="anzahl' + counter + '" placeholder="Anzahl" > ' + ' <input type="text" name="gesamt' + counter + '" id="gesamt' + counter + '" placeholder="Gesamt Netto" readonly ><div id="error' + counter + '"></div>'); newTextBoxDiv.appendTo("#TextBoxesGroup"); counter++; }); $("#removeButton").click(function () { if(counter==1){ alert("Es sind keine Positionen mehr zum Löschen vorhanden."); return false; } counter--; $("#TextBoxDiv" + counter).remove(); }); $("#getButtonValue").click(function () { var msg = ''; for(i=1; i<counter; i++){ msg += "\n Textbox #" + i + " : " + $('#textbox' + i).val(); } alert(msg); }); }); </script> </div> <input type='button' value='Position hinzufügen' id='addButton'> <input type='button' value='Position entfernen' id='removeButton'> </form> <?php include("js/ajax.php"); ?>
HTML-Code:
<script> $(document).ready(function(){ $('#code').on("keyup",function(){ var code = $("#code").val(); if(code==="") { $("#error1").html("Feld verpflichtend"); $("#posten1").trigger("reset"); return false; } else { $("#error1").html(""); $.ajax({ url:"stmmaction/stmmaction1.php", method:"POST", data: {code:code}, success:function(data) { var fdata=$.trim(data); var sp=fdata.split(","); $("#bezeichnung1").val(sp[1]); $("#preisnetto1").val(sp[2]); $("#preisbrutto1").val(sp[3]); $("#lagerbestand1").val(sp[4]); } }); } }); }); </script> <script> $(document).ready(function(){ $('#code2').on("keyup",function(){ var code2 = $("#code2").val(); if(code2==="") { $("#error2").html("Feld verpflichtend"); $("#posten2").trigger("reset"); return false; } else { $("#error2").html(""); $.ajax({ url:"stmmaction/stmmaction2.php", method:"POST", data: {code2:code2}, success:function(data) { var fdata=$.trim(data); var sp=fdata.split(","); $("#bezeichnung2").val(sp[1]); $("#preisnetto2").val(sp[2]); $("#preisbrutto2").val(sp[3]); $("#lagerbestand2").val(sp[4]); } }); } }); }); </script>
Die stmmaction2.php:
HTML-Code:
<?php
session_start();
$connect = mysqli_connect("localhost", "main", "*********", "main");
$code = $_POST["code2"];
$query = "SELECT * FROM `datensatz` WHERE code = '$code' ";
$result = mysqli_query($connect, $query);
while($erg = mysqli_fetch_assoc($result))
echo $erg["code"] . "," . $erg["bezeichnung"] . "," . $erg["preisnetto"] . "," . $erg["preisbrutto"] . "," . $erg["lagerbestand"];
?>
Am Ende möchte ich es noch so gestalten, dass ich nicht für jeden Artikel ein Script haben möchte, da ich ja selbst nicht weiß wieviel Artikel der Nutzer anlegen möchte. Hinweise auf Anfängerfehler sind gern willkommen, ich bin Neuling auf diesem Gebiet.
Danke vorab
Kommentar