• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Hilfe bei switch Anweisung

schnaaak

New member
Hallo Leute,

ich bin ein Anfänger und finde in meinem Quelltext leider das Problem nicht.
Ich möchte das sich jeweils ein Fenster mit einem Buchstaben öffnet und nach ner halben Sekunde wieder verschwindet.
Jetzt öffnet sich 1 Fenster mit allen Buchstaben und verschwindet nicht.

HTML:
function anzeigen()
	{
		var zufall;
		var buchstabe;
		var fenster;
		
		for(var i=1; i<=5; i++)
			{
				zufall = Math.floor(Math.random()*5)+1;
				switch(zufall)
					{
						case 1:
								{
									buchstabe = "A";
									fenster = window.open("", "Fenster","height=300, width=200");
									fenster.document.write(buchstabe);
									window.setTimeout("schließen()", 500);
									buchstabe = "";
									break;
								}
							case 2:
								{
									buchstabe = "B";
									fenster = window.open("", "Fenster","height=300, width=200");
									fenster.document.write(buchstabe);
									window.setTimeout("schließen()", 500);
									buchstabe = "";
									break;
								}
							case 3:
								{
									buchstabe = "C";
									fenster = window.open("", "Fenster","height=300, width=200");
									fenster.document.write(buchstabe);
									window.setTimeout("schließen()", 500);
									buchstabe = "";
									break;
								}
							case 4:
								{
									buchstabe = "D";
									fenster = window.open("", "Fenster","height=300, width=200");
									fenster.document.write(buchstabe);
									window.setTimeout("schließen()", 500);
									buchstabe = "";
									break;
								}
							case 5:
								{
									buchstabe = "E";
									fenster = window.open("", "Fenster","height=300, width=200");
									fenster.document.write(buchstabe);
									window.setTimeout("schließen()", 500);
									buchstabe = "";
									break;
								}
						default:
								
							alert("Fehler")
								
					}
			}
		
		
		
	}
	function schließen()
	{
		fenster.close();
	}
 
Zuletzt bearbeitet von einem Moderator:
Dein Code entspricht dem folgenden:
Code:
function ofenster(buchstabe){
  fenster = window.open("", "Fenster","height=300, width=200");
  fenster.document.write(buchstabe);
  window.setTimeout("schließen()", 500);
}

function anzeigen(){
  for(var i=0;i<5;++i)
    ofenster(["A","B","C","D","E"][Math.floor(Math.random()*5)]);
}

function schließen(){
  fenster.close();
}
Du erzeugst nur ein Fenster (das in der gleichnamigen Variable gespeichert ist) und schreibst mir document.write immer neue Buchstaben dazu. Wenn du in der for-Schleife nur eine Repitition machst, funktioniert die Schließfunktion.
Sebst, wenn die Buchstaben sich in einem eigenen Fenster öffnen würden, würden alle Fenster übereinander sein. Möchstest du das? Du sprichst oben von einem Buchstaben, warum dann die for-Schleife mit 5 Buchstaben?
 
ofenster(["A","B","C","D","E"][Math.floor(Math.random()*5)]);
Interessante Notation, aber meinst Du schnaaak versteht das?
 
Also so ganz versteh ich es nicht :D

Also nochmal zur Aufgabenstellung: Nach anklicken eines Buttons, öffnet sich ein Fenster und da steht ein Zufälliger Buchstabe drin.
Dann schließt sich das Fenster nach 0,5 Sekunden.
Dieser Vorgang soll sich automatisch noch 4 Mal wiederholen.
Also jeweil immer ein zufälliger Buchstabe.

Ist ein Merkspiel, wo man dann die Richtigen Buchstaben ankreuzen muss.
 
@schnaaak: in der Fehleskonsole sollte etwas stehen: die Funktion schließen (btw: Umlaute und ß sind keine gute Idee in Funktionsnamen) kennt die Variable fenster nicht - und nein, du sollst die nicht global machen, wie paul vorschlägt.

Code:
function ofenster(buchstabe){
  fenster = window.open("", "_blank","height=300, width=200");
  fenster.document.write(buchstabe);
  window.setTimeout(function(){
    fenster.close();
  }, 500);
}

function anzeigen(){
  for(var i=0;i<5;++i)
    ofenster(["A","B","C","D","E"][Math.floor(Math.random()*5)]);
}

Die Frage ist aber, warum du das überhaupt mit neuen Fenstern und nicht z.B. mit DIVs machst...

Zu document.write:
http://www.w3.org/html/wg/drafts/html/CR/webappapis.html#dynamic-markup-insertion schrieb:
This method has very idiosyncratic behavior. In some cases, this method can affect the state of the HTML parser while the parser is running, resulting in a DOM that does not correspond to the source of the document (e.g. if the string written is the string "<plaintext>" or "<!--"). In other cases, the call can clear the current page first, as if document.open( ) had been called. In yet more cases, the method is simply ignored, or throws an exception. To make matters worse, the exact behavior of this method can in some cases be dependent on network latency, which can lead to failures that are very hard to debug. For all these reasons, use of this method is strongly discouraged.
 
Ich habe es jetzt so weit gelöst, dass sich das Fenster dann nach 0,5 sekunden schließt.
Jedoch stehen immernoch alle Buchstaben auf einmal drin.

Ich verstehe die zeile:
HTML:
function anzeigen(){
  for(var i=0;i<5;++i)
    [B]ofenster(["A","B","C","D","E"][Math.floor(Math.random()*5)]);[/B]
}
so garnicht? Könnt ihr mir das erklären?

Hier mein Code:
HTML:
	var fenster;
	var buchstabeAlle = new Array(5);
	var buchstabe;
	var zufall;

function buchstabe()
	{

		for(var i=0; i<buchstabeAlle.length; i++)
		{
			zufall = Math.floor(Math.random()*5)+1;

			switch(zufall)
				{
					case 1:
						
							buchstabe = "A";
							break;
				
					case 2:
						
							buchstabe = "B";
							break;
						
					case 3:
						
							buchstabe = "C";
							break;
						
					case 4:
						
							buchstabe = "D";
							break;
						
					case 5:
						
							buchstabe = "E";
							break;
						
					default:
						alert("Fehler");
						
				}
			
			buchstabeAlle[i] = buchstabe;
			
			fenster = window.open("", "Fenster", "height=200, width=300");
			fenster.document.write(buchstabeAlle[i]);
			window.setTimeout(function(){
										fenster.close();
										}
							  , 500);
		}
	}
 
Zuletzt bearbeitet von einem Moderator:
Ein switch in einer schleife hab ich so auch noch nicht gesehen, das ergibt Unsinn.

Ich hätte das über eine Rekursion gelöst.

Code:
<!DOCTYPE html>
<html>
<head>
	<title>Open/Close</title>
<script type="text/javascript">
function run(){
	var startButton = document.querySelector("#startButton");
	var buchStabenArray = ["A","B","C","D","E"];
	var lastRandomNumber;
	var count = 0;
	var fenster;

	function getRandomNumber(){
		var randomNumber = Math.floor(Math.random() * buchStabenArray.length);
		if(randomNumber === lastRandomNumber){
			console.log("war gleich");
			return getRandomNumber();
		}else{
			lastRandomNumber = randomNumber;
			return randomNumber;
		}
	}

	function openWindow(url, name, props, idx) {
		  if(/*@cc_on!@*/false){ //do this only in IE
		    var windowRef = window.open("", name, props,idx);
		    windowRef.close();
		  }
		  var windowRef = window.open(url, name, props,idx);
		  if (!windowRef.opener) {
		    windowRef.opener = self;
		  }
		  windowRef.focus();
		  return windowRef;
	}

	function openClose(){
		var randomNumber = getRandomNumber();
		var buchStabe =  buchStabenArray[randomNumber];
		fenster = openWindow("", "_blank_"+String(count),"height=300, width=200", count);
		fenster.document.write(buchStabe);
		  window.setTimeout(function(){
		    fenster.close();
		    fenster = null;
		    count+=1;
			if(count<5){
		    	openClose();
		    }
		  }, 2000);
	}

	startButton.onclick = function(){
		openClose();
	}

}
</script>
</head>
<body onload="run()">
	<button id="startButton">Klick mich hart!</button>
</body>
</html>
Aus Spaß habe ich noch eine Funktion eingebaut, die Verhindert das ein Buchstabe nicht 2 mal hintereinander angezeigt wird.
Verhindert aber nicht das ein Buchstabe generell 2 mal angezeigt wird, wenn du Pech hast kommt 2 mal A und 3 mal B.
Dann empfiehlt sich die länge des Arrays zu kürzen, oder du schreibt neben her welcher Buchstabe schon mal vorkam.

Wie kkapsner schon sagt ist window.open keine gute Idee, die meisten popup blocker werden verhindern das eine Seite windows.open 2 mal triggern kann. Ich glaube beim 2ten Aufruf kommt eine null Referenz.

Das:
["A","B","C","D","E"][Math.floor(Math.random()*5)]
entspricht diesem:
var a = ["A","B","C","D","E"];
var randNr = Math.random()*5
var b = a[randNr]
 
Zuletzt bearbeitet:
Zurück
Oben