ralekay: javascript getelementbyid value falsch

Hi,

ich hab ma ne frage. Ich habe ein Form mit mehreren und verschiedenen Inputfeldern. Zum einen die Artikelnummer:

<input type=\"text\" size=\"5%\" value=\"".$article['order_item_sku']."\" id=\"sku_".$article['order_item_sku']."\" />

Weiterhin noch Artikelbezeichnung, -text und -preis. Ganz am Ende kommt dann der gute alte Speichern-Button:

<input type=\"button\" value=\"Speichern\" name=\"".$article['order_item_sku']."\" onclick=\"alert(document.getElementById('sku_'+".$article['order_item_sku'].").value);\" \>

Mein Problem ist jetzt, dass ich merkwürdigerweise bei der Ausgabe der Artikelnummer immer das gleiche Value angezeigt bekomme. Auch dann, wenn ich den Wert in der entsprechenden Textbox änder.

Klar. In der Textbox steht ja schon ein Value drin, aber wenn ich das doch von Hand im Formular überschreibe sollte das doch funktionieren, oder bin ich da auf dem falschen Dampfer?

Etwas was mich auch verwirrt ist, dass es einen Dummyartikel mit der Artikelnummer 00000 gibt. Ist dieser Wert in der Textbox eingetragen, funktioniert das Ändern der Daten und die Ausgabe der Art-Nr einwandfrei.

Woran kann das liegen? Hab schon alles was mir eingefallen ist, getestet. Jedoch bis jetzt ohne Erfolg. Ich hoffe mir kann da jemand helfen.

Mfg

Ralf

  1. Hi,

    <input type=\"text\" size=\"5%\" value=\"".$article['order_item_sku']."\" id=\"sku_".$article['order_item_sku']."\" />

    Wenn du ein clientseitiges Problem diskutieren willst, dann poste bitte auch clientseitigen Code.

    Mein Problem ist jetzt, dass ich merkwürdigerweise bei der Ausgabe der Artikelnummer immer das gleiche Value angezeigt bekomme. Auch dann, wenn ich den Wert in der entsprechenden Textbox änder.

    Klar. In der Textbox steht ja schon ein Value drin, aber wenn ich das doch von Hand im Formular überschreibe sollte das doch funktionieren, oder bin ich da auf dem falschen Dampfer?

    Es sollte, ja - ergo machst du wohl etwas falsch.

    Was das sein könnte, kann ich aus dem Code, den du gepostet hast, nicht erkennen.

    Etwas was mich auch verwirrt ist, dass es einen Dummyartikel mit der Artikelnummer 00000 gibt. Ist dieser Wert in der Textbox eingetragen, funktioniert das Ändern der Daten und die Ausgabe der Art-Nr einwandfrei.

    Welcher Wert wo eingegetragen?
    Redest du jetzt vom value des INPUT-Feldes, oder der id, die du dynamisch generierst?

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hi,

      also. Die id = sku. Das sind die Artikelnummern. Diese liegen in der Datenbank im Artikelstamm. Dort ist weiterhin der Artikelname, -text, usw. hinterlegt. Das Formular, welches ich dort generiere, ist eine Ansicht einer getätigten Bestellung. Dort werden die einzelnen Artikel in Form eines Formulars (für jeden Artikel ein eigenes Formular mit einem Speichernbutton / so ist die Vorgabe) aufgelistet. Der Values der Inputboxen oder Textareas kommt also aus der Datenbanktabelle mit den bestellten Artikeln. Aus dieser Bestellung wird später zur Weiterverarbeitung ein XML-Code generiert (zum späteren Drucken). Der ganze Druck hat dann mehrere Seiten. Da aber auf manchen Seiten nur 2 Artikel gedruckt werden sollen, hab ich einen Dummyartikel (Artikelnummer 00000) als Platzhalter erstellt.

      Angenommen auf der ersten Seite sollen 6 Artikel gedruckt werden und der Rest der Seite bleibt leer (10 passen auf eine Seite / 2 Spaltig), dann hab ich oben die 6 Artikel auf 2 Spalten aufgeteilt und der Rest der Seite wird mit Dummys gefüllt.

      Jetzt möchte ich über das Formular die Artikel im Nachhinein ändern. Also einfach mal den ersten Artikel durch einen anderen überschreiben. Fülle ich die passenden Felder nun aus und sende es ab, werden trotzdem die alten Inhalte der Textbox gesendet und nicht die Daten, mit welchen ich in die Textbox eingefügt habe.

      z.B.
      alter Wert 11111

      dieser steht in der txtbox und wird von mir mit

      neuer Wert 99999

      überschrieben. Gesendet wird aber dennoch der alte Wert, also 11111. Mache ich nun das gleiche bei einem Dummy-Artikel

      alter Wert 00000

      und überschreibe den Inhalt der txtbox mit

      neuer Wert 99999

      wird der richtige Wert (99999) auch gesendet. Da für jeden Artikel ja das gleiche Formular generiert wird und dort dann auch die gleiche Funktion aufgerufen wird (javascript), versteh ich nicht, was ich dort falsch mache, dass es nur bei den Dummy-Artikeln funktioniert und beim Rest nicht.

      Das ich da "wohl was falsch mache" ist mir klar. Sonst würde ich nicht hier nach Hilfe fragen.

      Zum Code und der Struktur. Ich rufe beim Klick auf den Speichern-Button eine Javascriptfunktion auf.

        
      function saveItem(itemID, path) {  
      params = document.getElementById('sku_'+ itemID).value +'||'+ document.getElementById('id_'+ itemID).value +'||'+ document.getElementById('short_desc_'+ itemID).value +'||'+ document.getElementById('price_'+ itemID).value +'||'+ itemID;  
      req.open('post', path, true);  
      req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');  
      	req.onreadystatechange = handleResponse;	  
      	req.send('params='+params);  
      }
      

      diese nimmt sich die Values der einzelnen Felder und sendet diese an ein php-skript. Und genau diese Values sind falsch. Beim generieren des Forms, steht bereits der Wert aus der Datenbank in dem Inputfeld. Dieser wird dann von mir überschrieben. Das Skript sendet jedoch den Wert vom Anfang. Folglich überschreibe ich dann die Daten in der DB mit den gleichen Daten. Nur bei den Dummyartikeln funktioniert es.

      Hier mal der Code zum generieren des Forms:

      	  
      while($article = mysql_fetch_array($q)):  
      $mod = $i % 2;  
      if($mod == 1): $bgcolor = "bgcolor=\"#eee\""; else: $bgcolor = "bgcolor=\"#fff\""; endif;  
      echo "<tr>";  
      echo "<td ".$bgcolor."><input type=\"text\" size=\"5%\" value=\"".$article['order_item_sku']."\" id=\"sku_".$article['order_item_sku']."\" /></td>";  
      echo "<td ".$bgcolor."><input type=\"text\" size=\"10%\" id=\"name_".$article['order_item_sku']."\" value=\"".$article['product_name']."\" /></td>";  
      echo "<td ".$bgcolor.">";  
      echo "	<textarea 	cols=\"35%\" rows=\"5\" id=\"short_desc_".$article['order_item_sku']."\"";  
      echo "				onKeyDown=\"charCounter('short_desc_".$article['order_item_sku']."', 250, 'charCount');\"";  
      echo "  			onKeyUp=\"charCounter('short_desc_".$article['order_item_sku']."', 250, 'charCount');\"";  
      echo "			  	onChange=\"charCounter('short_desc_".$article['order_item_sku']."', 250, 'charCount');\">";  
      echo 		$article['product_s_desc'];  
      echo "	</textarea>";  
      echo "<br>";  
      echo "<div style=\"font-family:Arial, Helvetica, sans-serif; font-size:11px; font-weight:bold; color:#CC0000;\">";  
      echo "	<script language=\"JavaScript\" type=\"text/javascript\">";  
      echo "		counterOutput('short_desc', 250, 'charCount');";  
      echo "	</script>&nbsp;(maximal 250 Zeichen)";  
      echo "</div>";  
      echo "</td>";  
      echo "<td ".$bgcolor.">";  
      echo "	<img src=\">";  
      echo "</td>";  
      echo "<td ".$bgcolor.">";  
      ?> <input type="hidden" name="<?php echo "id_".$article['order_item_sku']; ?>" id="<?php echo "id_".$article['order_item_sku']; ?>" value="<?php echo $article['order_item_id']; ?>"/> <?php  
      echo "<input type=\"text\" size=\"5%\" id=\"price_".$article['order_item_sku']."\" value=\"".$article['product_price']."\" /></td>";  
      echo "<td ".$bgcolor."><input type=\"button\" value=\"Speichern\" name=\"".$article['order_item_sku']."\"  onclick=\"saveItem(".$article['order_item_sku'].", ".$path.")\" \></td>";  
      echo "</tr>";	  
      $i++;  
      endwhile;
      

      Wie man sieht, setzt sich der Name jeder Textbox oder jedes Textareas aus einer statischen Kennung "sku_" und der Artikelnummer zusammen und kann so auch vom Javascript angesprochen werden. Also kommen schon mal die Werte aus dem richtigem Input-Feld an. Nur was ankommt stimmt nicht.

      Mfg

      Ralf

      1. Hi,

        Hier mal der Code zum generieren des Forms:

        [code lang=php]

        So lange du dich weigerst, dem Ratschlag bzw. der Bitte nachzukommen, bei der Diskussion eines *clientseitigen* Problems auch (nur) den Code zu posten, den der *Client* *erhält*, erwarte bitte zumindest von mir keine weitere Beschäftigung mit deinem Problem.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.