warum wird der code ausgeführt obwohl die variable nicht übergeben wurde
falke
- javascript
0 derletztekick0 falke0 derletztekick0 falke
0 Martin Hölter
Guten Tag,
ich mache grad einen Test in dem ich erst eine Anleitung zu den kommenden Aufgaben zeige die per weiter Button ausgeblendet werden , um danach die ersten Aufgaben zu zeigen die eine Zeitbeschränkung haben, aber auch vorzeitig, durch button zur nächsten Anleitung oder Aufgabenblock wechseln kann.
Also eine Anleitung zu meistens zwei Aufgabenblöcken.
Leider klappt das noch nicht so wie ich mir das vorstelle, vorallem frag ich mich warum der Timeout losgeht obwohl noch nicht die entsprechende Variable übergeben wurde.
<html>
<title>alter</title>
<body>
<?
if(isset($_GET['weiter'])){
?>
<script language="JavaScript" type="text/javascript">
<!--
document.getElementById("content0").style.display = "none";
document.getElementById("content1").style.display = "block";
//--> //das funktioniert nicht
</script>
<?
}
if(isset($_GET['start1']))
{
?>
<script language="JavaScript" type="text/javascript">
<!--
wegg = setTimeout('weg()',4000);
// dieser timeout wird einfach gestartet und ich hatte auch vor einen timeout in einem id gekennzeichneten Bereich zu machen.
Nur wird der auch automatisch gestartet oder erst wenn ich den Bereich auf block stelle??
function weg() {
document.getElementById("content1").style.display = "none";
document.getElementById("content2").style.display = "block";
}
//-->
</script>
<? }?>
<div id="content0" style="display:block"; width:300px; height:100px">
Erklärung:
<form action="alter.php" method="GET">
<input type="submit" name="weiter" value="weiter"></form>
</div>
<div id ="content1" style="display:none"; width:320px; height:240px">Hier ist das erste Kapitel
<form action="alter.php" method="GET">
<input type="submit" name="start1" value="weiter1" ></form>
</div>
<div id ="content2" style="display:none"; width:320px; height:240px">Hier ist das zweite Kapitel
<form action="alter.php" method="GET">
<input type="submit" name="start2" value="weiter2" </form>
</div>
kann ich eigentlich auch eine form um alle button machen, was aber im Versuch auch nicht geklappt hat.
mfg falke
Hallo,
Übergibst Du der Variablen einen Wert? Ich habe in PHP zwar nciht so den durchblick und kann nicht abschätzen, ob die bloße Nennung bereits einer definition gleichkommt.
seite.php?start1=true
<?php
if (isset($_GET['start1']) && $_GET['start1'] == 'true' ){
// Deine Anweisungen
}
?>
Mit freundlichem Gruß
Micha
hi,
also die überprüfung ob die Variable mit get übergeben wurde ist so eigentlich sichergestellt.
mfg falke
Hallo,
»» hi,
also die überprüfung ob die Variable mit get übergeben wurde ist so eigentlich sichergestellt.
Ja, ich habe es ausprobiert und kenne nun auch Deinen Fehler.
Wenn die Seite neu geladen wird, ?weiter=weiter, dann wird das erste JS in den Quellcode geschrieben:
if(isset($_GET['weiter'])){
?>
<script type="text/javascript">
<!--
alert("Bing1");
document.getElementById("content0").style.display = "none";
document.getElementById("content1").style.display = "block";
//-->
</script>
Das er den if-Zweig nimmt, habe ich mal durch ein alert getestet. Was nun Dein verhängnis ist, ist die Ladereihenfolge. In dem Moment, wo die Seite neu Läd, gibt es noch kein Elemet Content0 bzw. 1. Das JS kann also gar nicht auf dieses Element zugreifen.
Lösung:
if(isset($_GET['weiter'])){
?>
<script type="text/javascript">
<!--
function showcontent(){
document.getElementById("content0").style.display = "none";
document.getElementById("content1").style.display = "block";
}
window.onload = showcontent;
//-->
</script>
Nun wartet das JS, bis die Seite geladen ist und wird dann aktiv - es ist sichergestellt, das das Element somit vorhanden ist.
Mit freundlichem Gruß
Micha
hi,
ja das klappt soweit ganz gut nur wenn ich den nächsten button anklicke wird mir wieder content 0 gezeigt obwohl das auf keinen Fall geschehen sollte.
Ist es so das nach dem nächsten Aufruf content 0 wieder block ist?
Naja ich hatte das auch schon mit Variablen versucht was eigentlich halten sollte aber da gabs acuh einpaar schwierigkeiten.
ich werd es wohl nochmal mit variablen versuchen, was meint ihr?
mfg falke
Hallo,
Ist das immernoch Deine Funktion für den zweiten IF Zweig?
if(isset($_GET['weiter'])){
?>
<script language="JavaScript" type="text/javascript">
<!--
document.getElementById("content0").style.display = "none";
document.getElementById("content1").style.display = "block";
//--> //das funktioniert nicht
</script>
<?
}
if(isset($_GET['start1']))
{
?>
<script language="JavaScript" type="text/javascript">
<!--
wegg = setTimeout('weg()',4000);
// dieser timeout wird einfach gestartet und ich hatte auch vor einen timeout in einem id gekennzeichneten Bereich zu machen.
Nur wird der auch automatisch gestartet oder erst wenn ich den Bereich auf block stelle??
function weg() {
document.getElementById("content1").style.display = "none";
document.getElementById("content2").style.display = "block";
}
//-->
</script>
<? }?>
Dann hast Du hier genau das selbe Problem... Die Elemente sind ncoh nciht vorhanden auf die Du versuchst zu zugreifen.
Im Übrigen würde ich das nicht mit einem JS machen, sondern mit CSS oder noch besser, Du trägst in den verschiedenen if-Zweigen die Formulare ein, die angezeigt werden sollen. Dann umgehst Du das Problem doch gänzlich...
Mit freundlichem Gruß
Micha
Hi!
if (isset($_GET['start1']) && $_GET['start1'] == 'true' ){
// Deine Anweisungen
}
besser (in diesem Falle): if(!empty($_GET['start1']))
Gruß
Martin