Checkboxen überpüfen und Infos mit einem String oder so weiterschicken

mmhhh

Grünschnabel
Hallo alle zusammen,

also erstmal möchte ich mich dafür entschuldigen das ich euch mit diesem Thema nerve, allerdings bin ich gerade einfach vieeeeeel zu blöde um zu programmieren. Hoffe ihr helft mir trotzdem.

Also ich habe eine xsl-Datei bei der man mittels von checkboxen verschiedene Komponenten auswählen kann und drop down feld bei bei dem die dazugehörige Mengen ausgewählt werden kann.

Beispielhafter Code:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" media-type="text/html" encoding="UTF-8" />

<xsl:template match="/">
   <html>
       <head>
               <title>Liste </title>
               <link type="text/css" rel="stylesheet" href="listeFormat.css"/>
               <script src="liste.js" type="text/javascript"></script>
        </head>
        <body>
           <form id="form" method="GET">
               <xsl:if test="Rowsets/Rowset[2]/Row/Komponente"> 
	<span> 
                         <input type="checkbox" id="komponente">	
	        <label for="komponente" id="komponentenLabel">
                                    <xsl:value-of select="Rowsets/Rowset[2]/Row/Komponente"/>
                              </label>
                        </input>
                     </span>

	<span>
	    <select id="menge">			       			          <xsl:for-each select="//Rowset[2]/Row">					<option value="Menge">						<xsl:value-of select="Menge"/>				</option>			       			          </xsl:for-each>
	   </select>
	</span>
           </xsl:if>
           <xsl:variable name="temp" select="Rowsets/Rowset[2]/Row/Komponente[1]" /> 

           <xsl:for-each select="Rowsets/Rowset[2]/Row">
                 <xsl:if test="preceding-sibling::Row/Komponente[text() != $temp]"> 
	<span> 
                         <input type="checkbox" id="komponente">	
	        <label for="komponente" id="komponentenLabel">
                                    <xsl:value-of select="Rowsets/Rowset[2]/Row/Komponente"/>
                              </label>
                        </input>
                     </span>

	<span>
	    <select id="menge">			       			          <xsl:for-each select="//Rowset[2]/Row">					<option value="Menge">						<xsl:value-of select="Menge"/>				</option>			       			          </xsl:for-each>
	   </select>
	</span>			       				</xsl:if>
                </xsl:for-each>

              <input id="behaelter" src="Rowsets/Rowset/Row/Behaelter" style="visibility:hidden"/>
               <input id="anfMenge" src="Rowsets/Rowset/Row/angeforderteMenge" style="visibility:hidden"/>
         </form>

         <form id="buttonForm" action="irgendwas" method="GET">
              <input type="textarea" name="Param.1" cols="50" rows="20" value=""/>
              <input type="textarea" name="Param.2" cols="50" rows="20" value=""/>

               <span><input id="buttonOK" type="button" value="OK" onClick="javascript:checkKopfmaterial('form')"/></span>		
         </form>
         <xsl:apply-templates/>
        </body>
       </html>
 </xsl:template>


<xsl:template match="Komponente">
</xsl:template>
<xsl:template match="Menge">
</xsl:template> 
<xsl:template match="Behaelter">
</xsl:template>
</xsl:stylesheet>

Ich weiß der code ist redundant aber das ist auch egal. Ok. Also was ich nun möchte, ist wenn der Benutzer nun eine Komponente ausgewählt hat und auf OK drückt, dass mir eine String der eine XML Datei beinhaltet zugeschickt wird, die das Format hat, wie es in dem Code unten steht. Der Benutzer kann aber nun auch mehrere Komponenten auswählen, daher müssen auch mehrere Rows dynamisch erzeugt werden können. Und ich möchte das all dies mit einem concat() zusammen gefügt wird. Dazu habe ich folgendes JS schonmal geschrieben, aber es ist nicht annähernd fertig und ich würde auch nicht sagen das es richtig ist, aber wie schon gesagt ich kann heute einfach nicht programmieren :( so:
Code:
function checkKopfmaterial(formu) {

   var deklarationK="<?xml version='1.0' encoding='UTF-8' ?> \n ";
   var anfK="<Rowsets Version=\"\">\n <Rowset>\n <Columns> \n <Column Description=\"\" MaxRange=\"100\" MinRange=\"0\" Name=\"Komponente\" SQLDataType=\"1\" SourceColumn=\"Komponente\" />  \n <Column Description=\"\" MaxRange=\"100\" MinRange=\"0\" Name=\"Menge\" SQLDataType=\"1\" SourceColumn=\"Menge\"/>  \n <Column Description=\"\" MaxRange=\"100\" MinRange=\"0\" Name=\"Behaelter\" SQLDataType=\"1\" SourceColumn=\"Behaelter\"/>  \n <Column Description=\"\" MaxRange=\"100\" MinRange=\"0\" Name=\"angeforderteMenge\" SQLDataType=\"1\" SourceColumn=\"angeforderteMenge\"/> \n </Columns> \n "; 


   var kompAnfang="<Row> \n <Komponente>";
   var kompEnde="</Komponente>\n <Menge>";
   var mengeEnde="</Menge> \n <Behaelter>";
   var behaelterEnde="</Behaelter> \n <angeforderteMenge>";
   var anfMengeEnde="</angeforderteMenge>\n</Row>\n";
   var ende="</Rowset>\n</Rowsets>";

   var i="";
   for(var j=0; j<formu.elements.length; j++){
        i = formu.elements[j];
        var komponentenRow="";

       if(i.type=="checkbox"){
            if (i.checked == true) {
               var komp= document.getElementById('komponentenLabel').innerHTML;
               var menge= document.getElementById('menge').innerHTML;
               var behaelter= document.getElementById('behaelter').innerHTML;
               var anfMenge= document.getElementById('anfMenge').innerHTML;
              komponentenRow = kompAnfang.concat(komp, kompEnde, menge,mengeEnde, behaelter,behaelterEnde, anfMenge,anfMengeEnde);
           }		
      }
   }
  document.getElementsByName('Param.2')[0].value = deklarationK.concat(anfK, kompRow, ende);		 
}

Ich hoffe, ich konnte euch erklären was ich meine, wenn nicht probier ich gerne nochmal. Bitte bitte helft mir.

Gruß
 
Moin,

es wäre schon hilfreicher, wenn du eine komplett lauffähige Version inkl. dem zugehörigen XML posten würdest(oder besser noch als Anhang hochladen).

Aber generell würde ich das wohl anders angehen:
Du wirst ja sicher ein Skript auf dem Server haben, an welches dieser XML-String gesendet werden soll.
Anstatt da nun mit Javascript mühelig einen String zusammenzuwurschteln(ist nicht bös gemeint), wäre es u.U. einfacher, nur die Daten anhand der Auswahl an das serverseitige Skript zu senden, und dann dieses Skript ein XML-Dokument daraus erstellen und speichern zu Lassen.

2 Gründe dafür:
1.Das Erstellen eines echten XML-Dokumentes per DOM-Methoden bewahrt dich vor kaum absehbaren XML-Fehlern, wenn du versuchst, das mit String-Methoden zusammenzubauen

2:serverseitig erwarten dich höchstwahrscheinlich bessere DOM-Funktionalitäten als in Javascript...so bspw. in PHP
 
Hallo Sven,
vielen dank für deine Antwort. Deinen Vorschlag finde ich sehr gut und ich bin auch vollkommen deiner Meinung, allerdings ist es leider für meine Fälle nicht realisierbar. Naja trotzdem vielen Dank.
Ich hab das Problem jetzt mit einer while usw. gelöst wie im Code unten.

Gruß mmhhh

Code:
function checkKopfmaterial() {

   var deklarationK="<?xml version='1.0' encoding='UTF-8' ?> \n ";
   var anfK="<Rowsets Version=\"\">\n <Rowset>\n <Columns> \n <Column Description=\"\" MaxRange=\"100\" MinRange=\"0\" Name=\"Komponente\" SQLDataType=\"1\" SourceColumn=\"Komponente\" />  \n <Column Description=\"\" MaxRange=\"100\" MinRange=\"0\" Name=\"Menge\" SQLDataType=\"1\" SourceColumn=\"Menge\"/>  \n <Column Description=\"\" MaxRange=\"100\" MinRange=\"0\" Name=\"Behaelter\" SQLDataType=\"1\" SourceColumn=\"Behaelter\"/>  \n <Column Description=\"\" MaxRange=\"100\" MinRange=\"0\" Name=\"angeforderteMenge\" SQLDataType=\"1\" SourceColumn=\"angeforderteMenge\"/> \n </Columns> \n "; 


   var kompAnfang="<Row> \n <Komponente>";
   var kompEnde="</Komponente>\n <Menge>";
   var mengeEnde="</Menge> \n <Behaelter>";
   var behaelterEnde="</Behaelter> \n <angeforderteMenge>";
   var anfMengeEnde="</angeforderteMenge>\n</Row>\n";
   var ende="</Rowset>\n</Rowsets>";

   var rowK;
   var menge;
   do{
     if (document.getElementById('komponente').checked == true) {
	var komp= document.getElementById('komponentenLabel').innerHTML;
	menge = document.getElementById('menge').options[document.getElementById('menge').selectedIndex].text;
	var behaelter= document.getElementById('behaelter').innerHTML;
	var anfMenge= document.getElementById('anfMenge').innerHTML;
	komponentenRow = kompAnfang.concat(komp, kompEnde, menge,mengeEnde, behaelter,behaelterEnde, anfMenge,anfMengeEnde);
     }

     rowK = komponentenRow;
   }
   while(document.getElementById() == 'object');

  
   document.getElementsByName('Param.2')[0].value = deklarationK.concat(anfK, rowK, ende);		 
}
 

Neue Beiträge

Zurück