• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Wann werden Javascript Funktionen aufgerufen?

Nick

Mitglied
Hallo!
Ich habe gerade ein Problem.
Bei meinem Programm gibt es 9 Kästchen, von denen eins bei dem Klick von einem Link eingefärbt werden soll. Dabei müssen noch bestimmt Sachen mit PHP berechnet werden, sodass es nicht per Javscript geht.

Ich rufe also die Seite mit: http://localhost/TicTacTow/?add=b3 auf, und möchte das sich das Feld mit der class b3 färbt.
Dafür habe ich die Javscript Funktionen:
HTML:
function einfaerben(Element,Farbe){  
var ElementzumFaerben = Element;  
var FarbezumFaerben = Farbe;  
$(ElementzumFaerben).animate({ backgroundColor: FarbezumFaerben }, "slow");
}

Und dann noch eine PHP Funktion die die Javscript Funktion aufruft:
PHP:
function change_color ($wo,$farbe){  
 echo '   <script>  einfaerben("'.$wo.'","'.$farbe.'")  </script>';
}

Und wenn ich nun im Quellcode diese PHP Funktion aufrufe, klappt auch alles perfekt!

Wenn ich dann allerdings auf die URL reagieren will, passiert nichts:
PHP:
  <?php   
 if (isset($_GET["add"])){     
 $wo= '.'.$_GET["add"];      
if ($_SESSION['anzahl_zuege']%2 == 0){        
 $farbe = 'blue';      
}      
else {        
$farbe = 'green';      
}            
$_SESSION['anzahl_zuege']++;      
change_color ($wo,$farbe);    
} 
 ?>

Im Quellcode steht dann aber richtiger Weise zumindest:
HTML:
<script>  einfaerben(".b3","green")  </script>

Aber es wird nicht ausgeführt.

Lange Rede, kurzer Sinn: Wie kann ich es machen das dieses Funktion trotzdem ausgeführt wird?
Die Deklaration etc. stehen alle schon vorher...

Liebe Grüße
Nick
 
Steht der Script-Tag vor, oder nach dem '.b3'-Element? ;)

Ich gehe mal davon aus dass es davor steht.

Da du ohnehin jQuery nutzt wird das die Lösung sein, dann ist egal wo es steht:
Code:
$(document).ready(function () { einfaerben(); });

Aber komische Sache was du da machst, muss ich schon sagen :)
 
Danke! Mit dem Tipp von scbawik klappt es! :)

Aber was genau ist daran komisch? :D

Kein Problem ;)

Habe den zweiten PHP-Block nicht gelesen, deshalb war ich der Meinung dass du PHP einzig und alleine dazu verwendest, eine JavaScript-Animation aufzurufen. Durch die Session macht es jetzt schon mehr Sinn.

Dennoch könnte man es wahrscheinlich viel besser lösen. Anscheinend versuchst du Ajax zu simulieren bzw. vorzutäuschen.
Das ist von der Usability her meist ein graus.

Aber da ich dein Projekt nicht kenne, vielleicht ist es auch eine gute (nein, nicht gut, passabel) Lösung wie du es machst :P
 
hey ;)

Also ich baue ein TicTacTow Spiel, wobei Javascript (jQuery) halt das Design regelt, also welcher Block muss eingefärbt werden, und php speichert in einer Session welche Blöcke welche Farbe haben, und php regelt auch noch den ganzen Restlichen Mist (was muss der Computer für Steine setzen etc.)

Ich denke, da ich mich eher als blutiigen Anfänger bezeichnen würde, das es sicherlich noch passablere (wie du es nennst) Lösungsmöglichkeiten gäbe, aber da es jetzt so Funktioniert kann mir das vorerst doch eigentlich egal sein :p

Liebe Grüße
 
Ist aber schon fraglich ob es gut ist so etwas mit PHP zu lösen.
Wenn ich mir vorstelle ich muss bei jedem Klick auf ein Reload warten, bin ich nach dem ersten Klick weg ;)

Könnte man ja auch ganz in JS schreiben.
Wenn du den Spielverlauf aufzeichnen willst, bzw Multiplayer integrieren, kannst/musst du das sowieso mit Ajax lösen indem du die Spielzüge einfach an ein PHP-Script schickst.

Aber da du 'blutiger' Anfänger bist, ist es eher eine kleine Spielerei zum Lernen die ohnehin nie online geht?
 
Hey!

Hehe genau, es wird nie online gehen, nur um zu gucken ob ich sowas schaffe.

Aber immer noch zum Selben Problem...
Dieses Mal nur mit einer anderen Funktion:

HTML:
<script type="text/javascript"> 
  $(document).ready(function() { 
 $(".ausgabe").text("Herzlich Willkommen beim TicTacTow Spiel! :)  Du darfst beginnen! :)");  
});
</script>

Obriges Skript soll einfach einen Text in das Div mit der Class .ausgabe schreiben...

Folgendes PHP Script generiert dieses Javscript:
PHP:
<?php
  //Computer Ausgabe
if ($_SESSION['anzahl_zuege']%2 == 0){ 
if ($_SESSION['anzahl_zuege'] == 0){  
$text = 'Herzlich Willkommen beim TicTacTow Spiel! :)  Du darfst beginnen! :)';  
neue_ausgabe($text);
 }
 else {    
$text = 'Ich bin dran, mal gucken was ich jetzt geniales machen werde! Gib mir 3sekunden!';   
 neue_ausgabe($text);  
} 
}
else { 
$text = 'Na los, du bist!';  
neue_ausgabe($text);
}
?>

So wie es oben im ersten Quellcode steht, steht das Script im Quelltext.
In das Div mit der class .ausgabe wird leider nichts geschrieben.

Die weiteren Ausgaben : "'Ich bin dran, mal gucken was ich jetzt geniales machen werde! Gib mir 3sekunden!" Funktionieren komischerweise ab nach dem 2Zug...

Das ist irgendwie ziemlich mysterieus, ich hoffe ihr habt da eine Antwort :p
Liebe Grüße
 
Zurück
Oben