romero: "Warte-Schleife" mit return-Werten

Beitrag lesen

Hallo unknown,

Wie kann ich aber in den einzelnen return function(), Variablen so verändern, dass ich sie später wieder verwenden kann?
Auf alle Variablen die innerhalb des Scopes der deine Clousure erzeugt zugreifbar sind hast du Zugriff.
Du kannst also auf alle Variablen aus ISSUE_Ueberpruefung einfach zugreifen. z.B. auf list, infile, und list_ISSUE_Pruefung.

Also Variablen in dieses Konstrukt übergeben um damit zu arbeiten?
Aufpassen musst du mit Variablen die nach Erzeugung der Clousure noch verändert werden, du aber eigentlich den Wert zum Zeitpunkt der Erzeugung benötigst. Diesen musst du in einer extra Variablen sichern, die sich nicht mehr ändert.
Wie du das mit der Variablen i aus der for-Schleife gemacht hast. Die hast du in dem Argument i in der anonymen Funktion gespeichert.

Oder im Allgemeinen gesagt, wie kann ich da eine globale Variable (oder Array) verändern?
Auf globale Variablen kann man von überall zugreifen, das macht sie ja so gefährlich.

vielen herzlichen Dank, du hast mir sehr weiter geholfen.

Ich habe es nun geschafft, die Ausgangsvariablen (das Array() ) so zu verändern (mittels der Button), dass das Script nach drücken eines Button in der letzten Zeile mit den geänderten Werten weiterläuft.

Hier, für alle die es interessiert, der Code-Auszug:

			ISSUE_Ueberpruefung( list_A380_Frankreich_ohne_BTH, infile_unique_gesamt_A380_Frankreich_ohne_BTH, list_A380_Frankreich_ohne_BTH_ISSUE_Pruefung )  
			  
			function ISSUE_Ueberpruefung( list, infile, list_ISSUE_Pruefung )  
			{  
				//-----------------------------------------------//  
				//-- Tabellenaufbau für die ISSUE-Unterschiede --//  
				//-----------------------------------------------//  
				  
				if( ISSUE.length > 0 )  
				{  
					...  
				};  
				  
				msg( "<br>" );  
				  
				var ISSUE_Liste = document.getElementById( "Tabellenkopf_ISSUE" );  
				var ISSUE_Liste_TR = ISSUE_Liste.getElementsByTagName( "tr" );  
  
				//----------------------------------------//  
				//-- Funktion für den einzelnen Button, --//  
				//-- Übergabe des ÄNDERUNGS-ISSUE sowie --//  
				//-- Änderung der Teile im Array() und  --//  
				//-- Aufrufen der restlichen Funktionen --//  
				//----------------------------------------//  
				  
				function test( ISSUE_Buchstabe, ISSUE, infile_unique_gesamt_A380_Frankreich_ohne_BTH, counter )  
				{					  
					return function()  
					{  
						ISSUE_Liste.getElementsByTagName( "tr" )[counter+1].style.display = "none";  
						for( var i = 0; i < infile_unique_gesamt_A380_Frankreich_ohne_BTH.length; i++ )  
						{  
							if( ISSUE[counter].substr( 0, 14 ) == infile_unique_gesamt_A380_Frankreich_ohne_BTH[i].substr( 0, 14 ) )  
							{  
								infile_unique_gesamt_A380_Frankreich_ohne_BTH.splice( i, 1, infile_unique_gesamt_A380_Frankreich_ohne_BTH[i].substr( 0, 14 ) + ISSUE_Buchstabe );  
							};  
						};  
					  
						var z = 0;  
						  
						for( var k = 0; k < ISSUE_Liste_TR.length; k++ ) { if( ISSUE_Liste.getElementsByTagName( "tr" )[k].style.display == "none" ) { z++; }; };  
						  
						var t = parseInt( ISSUE_Liste_TR.length ) - parseInt( z );  
  
						if( t == 1 )  
						{  
							for( var i = 0; i < document.getElementById( "msgs" ).childNodes.length; i++ ) { if( document.getElementById( "msgs" ).childNodes[i].nodeName == "TABLE" ) { document.getElementById( "msgs" ).removeChild( document.getElementById( "msgs" ).childNodes[i] ) }; };  
							document.getElementById( "msgs" ).innerHTML = "";  
							  
							//------------------------------------------//  
							//-- Weiterführen der weiteren Funktionen --//							  
							//------------------------------------------//  
							  
							out_A380_Frankreich_ohne_BTH = Ueberpruefen_ob_Daten_vorhanden( list_A380_Frankreich_ohne_BTH, infile_unique_gesamt_A380_Frankreich_ohne_BTH );  
			  
							//--> Dateien und Infile vergleichen, sowie deren Anzahl anhängen  
  
							save_A380_Frankreich_ohne_BTH( out_A380_Frankreich_ohne_BTH, anzahl_gesamt_A380_Frankreich_ohne_BTH, infile_unique_gesamt_A380_Frankreich_ohne_BTH, excel_infile_A380_Frankreich_ohne_BTH, starttime );  
  
							document.getElementById( "STL_Meldungen_Überschreiben" ).style.display = "inline";  
							document.getElementById( "STL_Meldungen_Alt_Text_Links" ).style.display = "inline";  
							document.getElementById( "STL_Meldungen_Alt_Text" ).style.display = "none";	  
						};  
					};  
				};  
				  
				//-----------------------------------------------------------//  
				//-- Zeilenlänge bestimmen und Button-Funktion deklarieren --//  
				//-----------------------------------------------------------//  
				  
				for( var i = 1, j = 0; i < ISSUE_Liste_TR.length; i++, j++ )  
				{  
					var ISSUE_Liste_INPUT = ISSUE_Liste_TR[i];  
					  
					ISSUE_Liste_INPUT.getElementsByTagName( "input" )[0].onclick = test( ISSUE_Verlangt_Buchstaben[j], ISSUE, infile_unique_gesamt_A380_Frankreich_ohne_BTH, j );					  
					ISSUE_Liste_INPUT.getElementsByTagName( "input" )[1].onclick = test( ISSUE_Vorhanden_Buchstaben[j], ISSUE, infile_unique_gesamt_A380_Frankreich_ohne_BTH, j );  
				};  
			};

Um es kurz zu beschreiben. Ich übergebe, nachdem ich die onclicks für die Button definiert habe, die Variablen, welche ich benötige in eine weitere Funktion ( test(var1, var2, ...) ). in der packe ich ein return function, welches die Hauptaufgabe hat, für jedes gedrückte Button die Ausgangsvariable (hier: infile_unique_gesamt_A380_Frankreich_ohne_BTH ) so zu verändern, damit das für mich richtige Resultat, sprich den Kennbuchstaben, für die nächsten Funktionen rauskommt.

Und das passiert so lange, bis alle Zeilen (da wo Buttons versteckt sind) display = "none" gesetzt sind bzw. am Ende dadurch die Tabelle wieder rausgelöscht wird.

LG Romero