Romero: Datei an beliebigen Stelle einbinden o. Optionsdaten erstellen

Hallo liebe Gemeinde,
jetzt werden einige gleich denken, och nicht der schon wieder. Ja ich bin es wieder, habe wieder ein Problem.

Ich versuche gerade einen Ordner auszulesen, wo er danach eine eigene dynamische verkettete Auswahlliste erstellt.
Sprich: es wird als erstes der Ordner ausgelesen und danach die einzelnen Verkettungen gebildet.

Dieses Teilscript (s. u. Zusatzmatte.js) ist eine include-Datei. Sie wird durch ein vorheriges Script aufgerufen:

	<script type="text/javascript" src="Zusatzmatten.js"></script>function Go()  
{//--------------  
	//Initialisieren  
	//--------------  
				//--> weiteres Ausführen des Scriptes  
				if( Eingabewerte.Bereich1 == "D" || Eingabewerte.Bereich1 == "E" || Eingabewerte.Bereich1 == "F" || Eingabewerte.Bereich1 == "G" )  
				{  
					document.getElementById( "STL_Meldungen_Überschreiben" ).style.display = "none";  
					document.getElementById( "STL_Meldungen_Alt_Text" ).style.display = "none";  
					document.getElementById( "STL_Zusatz_Meldungen" ).style.display = "inline";  
					init_Zusatzmatten() //-> hier wird die Datei Zusatzmatte initialisiert  
				} else {  
						document.getElementById( "STL_Meldungen_Überschreiben" ).style.display = "inline";  
						document.getElementById( "STL_Meldungen_Alt_Text" ).style.display = "inline";  
						document.getElementById( "STL_Zusatz_Meldungen" ).style.display = "none";  
						init_STL()  
					}}

Ich habe nun, wie unter selfhtml beschrieben, die include-Datei terminAuswahl.js so umgewandelt, dass mein Teilscript nun eine eigene Datei erstellt auf der Basis dieser terminAuswahl.js. Ich habe die komplette LinkedSelection übernommen und meinen eigenen Inhalt (Optionsdaten) eingefügt.

Das nun aufgeführte Script soll es verdeutlichen:

		//-----------------------------  
		//-- Initialisierung  
		//-----------------------------  
		function init_Zusatzmatten()  
		{  
			var infile_zusatz, list_zusatz, out_zusatz, Zusatzmatten;  
			list_zusatz = FilesToZusatz();  
			out_zusatz = prüfen( list_zusatz );  
			msg( "<-- hier steht was ganz neues--><br>" );  
			Zusatzmatten = AuswahlForZusatz( out_zusatz, list_zusatz );  
			document.getElementsByTagName( "body" )[0].onload = "Auswahl1();Auswahl2()";  
			Auswahl2()  
		};  
		function FilesToZusatz()  
		{  
			var folder_files = new Array();  
			var out = new Array();  
			var out_zusatz = [];  
  
			fso = new ActiveXObject("Scripting.FileSystemObject");  
			folder = fso.getFolder( "O:/SCHNITT_IGES_2003_02_25/A318-A321_SA_Matten" );  
			files = new Enumerator(folder.Files);  
			files.moveFirst();  
  
			for( ;!files.atEnd(); files.moveNext() )  
			{  
				d = files.item().name;  
				if( d.toLowerCase() != "" )  
				{  
					folder_files.push( d );  
				}  
			}  
			for( var i = 0; i < folder_files.length; i++ )  
			{  
				out.push( folder_files[i] )  
			}  
  
			var last = "";  
			var last_out = "";  
  
			for( var i = 0; i < out.length; i++ )  
			{  
				if( last == out[i].substr( 0, 14 ) )  
				{  
					last_out = "";  
				} else {  
					last_out = out[i].substr( 0, 14 );  
  
					out_zusatz.push( last_out );  
  
					}  
				last = out[i].substr( 0, 14 );  
			}  
			return out_zusatz;  
		};  
		function prüfen( list_zusatz )  
		{  
			var out = [];  
			var out_zusatz = [];  
			var last = "";  
			var last_out = "";  
  
			for( var i = 0; i < list_zusatz.length; i++ )  
			{  
				out = out.concat( list_zusatz[i].substr( 0,10 ) )  
			}  
			for( var i = 0; i < out.length; i++ )  
			{  
				if( last == out[i] )  
				{  
					last_out = "";  
  
				} else {  
  
					last_out = out[i];  
  
					out_zusatz.push( last_out );  
  
					}  
  
				last = out[i];  
			}  
			return out_zusatz;  
		};  
		function AuswahlForZusatz( out, variante )  
		{  
			var Zusatzmatten = "";			//-> komplettes Daten-Object für die verkettete Auswahlliste  
			var Zusatz_HTZ = "";			//-> HTZ als Daten-Object für die verkettete Auswahlliste  
			var Zusatz_Varianten = "";		//-> Variante als Daten-Object für die verkettete Auswahlliste  
  
			var temp_variante = [];			//-> einzelne Variante  
  
			document.getElementById( "STL_Zusatz_Meldungen" ).innerHTML = '<p class="Zusatzmatten">Zusatzmatte(n) für den Bereich ' + Eingabewerte.Alt_Text + ': <label id="ZusatzLabel" for="Zusatz"></label><select id="Zusatz" name="Zusatz"><option value="--">Bitte wählen:</option></select> <label id="ZusatzVarianteLabel" for="ZusatzVariante"></label><select id="ZusatzVariante" name="ZusatzVariante"><option value="--">Bitte wählen:</option></select>';  
  
			for( var i = 0; i < out.length; i++ )  
			{  
				//-> HTZ als Auswahlliste erstellen  
  
				document.Auswahl.Zusatz.options[document.Auswahl.Zusatz.length] = new Option( out[i], i, false, false );  
  
				if( i == out.length-1 )  
				{  
					Zusatz_HTZ = Zusatz_HTZ.concat( "'" + i + "' : ['" + i + "', '" + out[i] + "'] " );  
  
				} else {  
						Zusatz_HTZ = Zusatz_HTZ.concat( "'" + i + "' : ['" + i + "', '" + out[i] + "'], " );  
					}  
				//-> Variante als Auswahlliste erstellen  
  
				var temp_varianten = [];		//-> Varianten passend zur HTZ  
				var temp_Zusatz_Varianten = "";		//-> temporale Variante als Daten-Object für die verkettete Auswahlliste  
  
				for( var k = 0; k < variante.length; k++ )  
				{  
					if( out[i] == variante[k].substr( 0,10 ) )  
					{  
						temp_variante.push( variante[k].substr( 11,3 ) );  
  
						temp_varianten = temp_varianten.concat( temp_variante[k] );  
					}  
				}  
				for( var j = 0; j < temp_varianten.length; j++ )  
				{  
					if( j == temp_varianten.length-1 )  
					{  
						temp_Zusatz_Varianten = temp_Zusatz_Varianten.concat( "['" + out[i] + "', '" + temp_varianten[j] + "'] " );  
  
					} else {  
							temp_Zusatz_Varianten = temp_Zusatz_Varianten.concat( "['" + out[i] + "', '" + temp_varianten[j] + "'], " );  
						}  
				}  
				if( i == out.length-1 )  
				{  
					Zusatz_Varianten = Zusatz_Varianten.concat( "'" + i + "' : [ " + temp_Zusatz_Varianten + "] " );  
  
				} else {  
						Zusatz_Varianten = Zusatz_Varianten.concat( "'" + i + "' : [ " + temp_Zusatz_Varianten + "], " );  
					}  
			}  
			var fso = new ActiveXObject("Scripting.Filesystemobject");  
  
			file = fso.OpenTextFile("C:/test/Zusatzmattenauswahl.js", 2, true); //-> erstellen der Datei  
			file.write( "var Zusatzmatten = { 'Zusatz' : { " + Zusatz_HTZ + "}, 'ZusatzVariante' : { " + Zusatz_Varianten + "} };" );  
			file.close();  
		};  
		function ergebnisZeigenZusatz( selected )  
		{  
			if( selected.length )  
			{  
  
				var sel = '';  
				var val = '';  
				var txt = '';  
				for( var i = 0; i < selected.length; i++ )  
				{  
					sel += ( i>0 ? ' &rarr; ' : '') + selected[i].id;  
					val += ( i>0 ? ' &rarr; ' : '') + selected[i].value;  
					txt += ( i>0 ? ' &rarr; ' : '') + selected[i].text;  
				}  
			}  
  
		};  
  
		function Auswahl2()  
		{  
			var vkZusatz = new LinkedSelectionZusatz( [ 'Zusatz', 'ZusatzVariante' ], ergebnisZeigenZusatz, Zusatzmatten );  
		};

Nun will ich aber, bevor er diese function ergebnisZeigenZusatz( selected ) aufruft, diese Dateien einbinden. Wie mache ich das? Oder gibt es einen einfacheren Weg diese Variable „Zusatzmatten“ der function Auswahl2() zu deklarieren?

Wenn ich statt dass Erstellen der Datei es gleich in die Variable „Zusatzmatten“ schreibe, dann kann er damit nix mit den anderen Variablen anfangen, welche diese Optionsdaten erstellen, sprich ich müsste die Variable per Hand erstellen.
Statt so:

var Zusatzmatten = "{ 'Zusatz' : { " + Zusatz_HTZ + "}, 'ZusatzVariante' : { " + Zusatz_Varianten + "} };"

auf so:

var Zusatzmatten = "{ 'Zusatz' : { 'LR5' : ['LR5', 'A340-500'], 'LR6' : ['LR6', 'A340-600'] }, 'ZusatzVariante' : { 'LR5' : [ ['A345_1', '13 / 14'],… " -> so sieht auch die Datei aus, wo die var Zusatzmatte gespeichert ist

Wie gesagt, wenn ich es in die Datei speichere, klappt es, dass er damit was anfangen kann, aber wie rufe ich diese Datei kurz vor der function ergebnisZeigenZusatz() auf?
Und die andere Frage ist, gibt es einen einfacheren Weg, so dass ich den Umweg des in die Datei Speicherns umgehe?

LG Romero

  1. Hi,

    wenn du uns mit so viel Code zusch(m)eißt, ist es schwer, deine eigentliche Fragestellung zu erfassen ...

    Nun will ich aber, bevor er diese function ergebnisZeigenZusatz( selected ) aufruft, diese Dateien einbinden. Wie mache ich das?

    Entweder ein neues Script-Element erzeugen und im Head einbinden, oder per AJAX die Daten vom Server anfordern.

    Und die andere Frage ist, gibt es einen einfacheren Weg, so dass ich den Umweg des in die Datei Speicherns umgehe?

    Wenn du die Daten serverseitig nicht statisch ablegen willst, dann erzeuge sie dynamisch.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hi,

      wenn du uns mit so viel Code zusch(m)eißt, ist es schwer, deine eigentliche Fragestellung zu erfassen ...

      Nun will ich aber, bevor er diese function ergebnisZeigenZusatz( selected ) aufruft, diese Dateien einbinden. Wie mache ich das?

      Entweder ein neues Script-Element erzeugen und im Head einbinden, oder per AJAX die Daten vom Server anfordern.

      Meinst du damit?

      document.getElementsByTagName( "body" )[0].onload = "Auswahl1();Auswahl2()";

      Und die andere Frage ist, gibt es einen einfacheren Weg, so dass ich den Umweg des in die Datei Speicherns umgehe?

      Wenn du die Daten serverseitig nicht statisch ablegen willst, dann erzeuge sie dynamisch.

      MfG ChrisB

      »»

      Es wird auf keinem Server stattfinden. Das ganze basiert auf einer *.hta-Datei.

      Aber wie erzeuge ich sie denn dynamisch? Habs ja versucht, aber da funktioniert die LinkedSelection nimmer, da data[...] Null oder kein Objekt ist.

      Also so geht das nicht:

      var Zusatzmatten = "{ 'Zusatz' : { " + Zusatz_HTZ + "}, 'ZusatzVariante' : { " + Zusatz_Varianten + "} };"

      Da findet er keine Zuordnung.

      LG Romero

      1. Hi,

        Entweder ein neues Script-Element erzeugen und im Head einbinden, oder per AJAX die Daten vom Server anfordern.

        Meinst du damit?

        Was da steht.

        document.getElementsByTagName( "body" )[0].onload = "Auswahl1();Auswahl2()";

        Steht das da?

        Es wird auf keinem Server stattfinden. Das ganze basiert auf einer *.hta-Datei.

        Jede Menge Code, aber wichtige Infos unterschlagen ... *seufz*

        Aber wie erzeuge ich sie denn dynamisch? Habs ja versucht, aber da funktioniert die LinkedSelection nimmer, da data[...] Null oder kein Objekt ist.

        Dann debugge, und finde heraus, warum das „nicht funktioniert“.

        Also so geht das nicht:

        var Zusatzmatten = "{ 'Zusatz' : { " + Zusatz_HTZ + "}, 'ZusatzVariante' : { " + Zusatz_Varianten + "} };"

        Da findet er keine Zuordnung.

        Das ist ja auch nur ein Textstring.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hi,

          Entweder ein neues Script-Element erzeugen und im Head einbinden, oder per AJAX die Daten vom Server anfordern.

          Meinst du damit?

          Was da steht.

          document.getElementsByTagName( "body" )[0].onload = "Auswahl1();Auswahl2()";

          Steht das da?

          kannst du mir dabei mal helfen? Sorry weiß halt nicht wie ich ein neues script-element im head erzeuge.

          Also so geht das nicht:

          var Zusatzmatten = "{ 'Zusatz' : { " + Zusatz_HTZ + "}, 'ZusatzVariante' : { " + Zusatz_Varianten + "} };"

          Da findet er keine Zuordnung.

          Das ist ja auch nur ein Textstring.

          MfG ChrisB

          und wie kann man es als datenobjekt schreiben?

          lg romero

          1. Hi,

            bitte zitiere langsam mal vernünftig, und nicht immer alles!

            kannst du mir dabei mal helfen? Sorry weiß halt nicht wie ich ein neues script-element im head erzeuge.

            Mit den dafür vorgesehenen DOM-Methoden - createElement, appendChild; und natürlich noch mit den entsprechenden Attributen ausstatten.

            var Zusatzmatten = "{ 'Zusatz' : { " + Zusatz_HTZ + "}, 'ZusatzVariante' : { " + Zusatz_Varianten + "} };"

            Da findet er keine Zuordnung.

            Das ist ja auch nur ein Textstring.

            und wie kann man es als datenobjekt schreiben?

            var Zusatzmatten = { Zusatz : Zusatz_HTZ, ZusatzVariante : Zusatz_Varianten };

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. ok mach ich,

              der erste teil hat mir sehr geholfen. es funzt wunderbar.

              das mit dem zweiten teil,

              var Zusatzmatten = { Zusatz : Zusatz_HTZ, ZusatzVariante : Zusatz_Varianten };

              hat nicht so ganz geklappt, da bei der linkedselection diese stelle

              	var replaceOptions = function( newOptions )  
              	{  
              		/*  
              		 * Diese Funktion setzt bewusst DOM-Methoden ein und verzichtet  
              		 * auf die vom Options-Objekt gegebenen Möglichkeiten.  
              		 */  
                
              		// alte Optionen der Auswahlliste löschen  
              		var opts = this.getElementsByTagName( 'option' );  
              		while( opts.length > 0 )  
              			this.removeChild( opts[0] );  
                
              		// wenn keine neuen Optionen übergeben wurden, default-Option setzen  
              		// andernfalls "Bitte wählen" voranstellen  
              		if( newOptions.length == 0)  
              			this.addOption( '--', 'Bitte wählen:' );  
              		else  
              			this.addOption( '--', 'Bitte wählen:' );  
                
              		// neue Optionen in die Auswahlliste schreiben  
              		for( var i = 0; i < newOptions.length; i++ )  
              			this.addOption( newOptions[i][0], newOptions[i][1] );  
              	};
              

              bei if( newOptions.length == 0) einen fehler registriert.

              lg romero

              1. Hi,

                hat nicht so ganz geklappt, da bei der linkedselection diese stelle
                [...]
                bei if( newOptions.length == 0) einen fehler registriert.

                Fehlermeldungen im Wortlaut benennen!
                Und auch sagen, was newOptions denn eigentlich ist - ohne zu wissen, was du dort übergibst, können wir dir auch nichts dazu sagen.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                1. Hi,

                  hat nicht so ganz geklappt, da bei der linkedselection diese stelle
                  [...]
                  bei if( newOptions.length == 0) einen fehler registriert.

                  Fehlermeldungen im Wortlaut benennen!
                  Und auch sagen, was newOptions denn eigentlich ist - ohne zu wissen, was du dort übergibst, können wir dir auch nichts dazu sagen.

                  MfG ChrisB

                  er sagt 'length' ist Null oder kein Objekt gibt er aus.

                  wie gesagt, ich habe diese linkedselection hier auf der seite von selfhtml gefunden. da auch nix geändert.

                  ich habe nur diese datenobjekt-datei geändert bzw erstellt und nun eingefügt.

                  wenn ich aber diese andere variante nehme, welche du oben unter var Zusatzmatten ... beschrieben hast, bringt er mir diese fehlermeldung. habe diese art der datenobjektierung an die stelle geschrieben, wo ich diese datei erstelle, danach ein return zusatzmatten eingefügt und bei init_zusatzmatten die function auswahl2() auf auswahl2(zusatzmatten) geändert. zudem auch die function auswahl2() auf auswahl2(zusatzmatten) (unterhalb der function ergebniszeigenzusatz()).

                  wenn du sagt, das es das selbe ist nur dem weg der datei-erstellung ist,dürfte da ja nichts passieren oder?

                  lg romero

                  1. Hi,

                    verflixt noch mal, zitierst du jetzt bitte endlich mal vernünftig? Wie oft muss man dir das denn noch sagen, bis du es kapierst?

                    wenn ich aber diese andere variante nehme, welche du oben unter var Zusatzmatten ... beschrieben hast, bringt er mir diese fehlermeldung.

                    Logisch, das ist ja auch ein simples Objekt, und das hat keine length-Eigenschaft.
                    Arrays haben eine - vielleicht möchtest du ja eigentlich ein solches verwenden?

                    habe diese art der datenobjektierung an die stelle geschrieben, wo ich diese datei erstelle, danach ein return zusatzmatten eingefügt und bei init_zusatzmatten die function auswahl2() auf auswahl2(zusatzmatten) geändert. zudem auch die function auswahl2() auf auswahl2(zusatzmatten) (unterhalb der function ergebniszeigenzusatz()).

                    Das ist schon wieder Geschwafel, das kaum nachvollziehbar ist.
                    Du beziehst dich auf Code, den du ein halbes Dutzend Postings vorher mal gezeigt hast, und beschreibst jetzt irgendwelche Änderungen daran, und die noch nicht mal präzise, sondern nur so wischi-waschi, „hier was eingefügt, da was geändert, ...“
                    Es sollte dir doch wohl einleuchten, dass das für Mitleser hier, die deinen Code nicht vor sich haben, eher einem Puzzlespiel gleichkommt, als einer nachvollziehbaren Problembeschreibung - und dass es so überhaupt keinen Spaß macht, sich mit deinem Problem zu beschäftigen.

                    MfG ChrisB

                    --
                    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                    1. habs jetzt so gemacht, dass nun eine datei gespeichert wird,welche ich dann wieder aufrufe.

                      wie kann ich aber eine variable in eine neue function mit übernehmen?

                      hab da folgenden code-auszug:

                      document.getElementById( "STL_Zusatz_Meldungen" ).innerHTML = '<p class="Zusatzmatten">Zusatzmatte(n) für den Bereich ' + Eingabewerte.Alt_Text + ': <label id="ZusatzLabel" for="Zusatz"></label><select id="Zusatz" name="Zusatz" class="STL_Meldungen_Button" onClick="SelectZusatz()"><option value="--">Bitte wählen:</option></select> <label id="ZusatzVarianteLabel" for="ZusatzVariante"></label><select id="ZusatzVariante" name="ZusatzVariante" class="STL_Meldungen_Button" onClick="SelectZusatz()"><option value="--">Bitte wählen:</option></select> <input type="button" name="ZusatzmatteAuswahl" class="STL_Meldungen_Button" value="Auswählen" onClick="ZusatzmatteAuswählen()" disabled></input> <input type="button" name="ZusatzmatteStart" id="ZusatzmatteStart" class="STL_Meldungen_Button" value="Start" onclick="ZusatzmatteStarten()" disabled></input>';  
                      
                      

                      hier die function ZusatzmatteAuswählen()

                      		function ZusatzmatteAuswählen()  
                      		{  
                      			var Zusatz_HTZ = document.Auswahl.Zusatz.options[document.Auswahl.Zusatz.selectedIndex].text;  
                      			var Zusatz_Variante = document.Auswahl.ZusatzVariante.options[document.Auswahl.ZusatzVariante.selectedIndex].text;  
                        
                      			var infile_Zusatz = new Array();  
                        
                      			infile_Zusatz.push( Zusatz_HTZ + "_" + Zusatz_Variante );  
                        
                      			msg( infile_Zusatz );  
                        
                      			document.getElementById( "ZusatzmatteStart" ).onclick = new Function( "ZusatzmatteStarten( infile_Zusatz )" );  
                      		}
                      

                      nun soll aber die variable infile_zusatz in die function ZusatzmatteStarten() übernommen werden. kann mir einer sagen wie es geht?

                      die function ZusatzmatteStarten( infile_Zusatz )

                      		function ZusatzmatteStarten( infile_Zusatz )  
                      		{  
                      			document.getElementById("STL_Meldungen_Fehlerausgabe").style.display = "none";  
                      			document.getElementById("STL_Meldungen_Fehler").innerHTML = "";  
                        
                      			msg( infile_Zusatz + " / " );  
                        
                      			init_STL( infile_Zusatz); //-> weiteres Aufrufen eines Scriptes, wo die infile_zusatz benötigt wird.  
                      		}
                      

                      will halt gern,dass der start-button zwar zusehen ist aber die infile_zusatz ( sind daten drin,welche ich mittels der function ZusatzmattenAuswählen und der dropdown-felder ausgewählt habe) sozusagen mit übernommen wird,damit ich die init_STL() starten kann.

                      lg romero