Onclick : Appeler 2 fontions / faire 2 appelles

Varkan Messages postés 27 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 17 mai 2011 - 16 mai 2011 à 10:55
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 - 17 mai 2011 à 10:13
Bonjour à tous !

Me voici avec un nouveau problème pour mon projet de Memory.

Voici ma balise <td> dans ma page fontion.php

<td bgcolor ="#6095E4" width="50" height="50" onClick="Javascript:window.document.location.href='partie.php?colonne=<?php echo $i;?>&ligne=<?php echo $j;?>';swap(this)"><?php


Je sais que dans mon onClick je ne peux pas faire 2 appelles... Mais c'est pour vous faire une idée de ce que j'aimerais faire.

Le première appelle me permet de renvoyé l'utilisateur à la page partie.php avec 2 paramètre (lignes et colonnes) afin de faire des comparaison d'images.

Le deuxième appelle me renvoi au script ci-dessous (qui se trouve dans partie.php) me permettant de retourner mes images en cliquant sur ma cellule :

function swap(_cell){
            // récupère le premier fils image de la cellule.
            var _firstChildImg = _cell.getElementsByTagName("img")[0];
            // si elle est cachée on la montre
            if (_firstChildImg.style.visibility=="hidden"){
                    _firstChildImg.style.visibility="visible";
                    // et la je fais mon traitement qui va bien...
            }else{
                    // sinon, l'image est déjà cliqué,
                    alert ("Cette images est déjà retournée");
            }
    }


Donc mon est d'exécuter les 2 appelles en cliquant sur les cellules de mon tableau html... Auriez-vous une idée pour se faire ?

Merci d'avance.

12 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
16 mai 2011 à 12:05
Salut,

je suis pas sûr de bien saisir ton souci, mais sache qu'on peut très bien faire autant de JS qu'on veut dans un onClick. Le malentendu vient certainement du fait que ta première instruction est une redirection (et que donc le code qui suie ne peut être évalué).
0
Varkan Messages postés 27 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 17 mai 2011
16 mai 2011 à 12:11
Salut,

Oui je viens de l'apprendre pour le onlcick, suffit de séparer par ";"

Maintenant, comme tu le dis, je pense que ma redirection pose problème...

Mais j'avais une idée mais je ne sais pas si c'est faisable...

Voici mon test me permettant de stocker mes click dans une variables et des les comparer pour savoir si elle semblable.

if(isset($_GET['ligne']))
{     
    $j = $_GET['ligne'];
    $i = $_GET['colonne'];
    if(isset($_SESSION["img1"]))
    {
        if(isset($_SESSION["img2"]))
        {
            echo $_SESSION["img1"];
            echo $_SESSION["img2"];
        }
        else
        {

            $_SESSION["img2"] = $_SESSION["tblnum"][$j][$i];

            if($_SESSION["img2"] == $_SESSION["img1"]) // Comparer les numéros des images
            {
                echo "trouvé";
                // laisser les images face visible
                unset($_SESSION["img1"]);
                unset($_SESSION["img2"]);
            }
            else
            {
                echo "recommence";
                // mettre les images face cachée
                unset($_SESSION["img1"]);
                unset($_SESSION["img2"]);
            }
        }
    }
    else
    {
        $_SESSION["img1"] = $_SESSION["tblnum"][$j][$i];
    }
}
else
{
    echo "il n'y a rien encore";
}


Le test marche très bien, je click sur ma cellule, le onclick s'enclenche, mon premier click se met dans la sessions img1 et le 2ème click dans img2.

donc voici mon idée :

Quand je fait mon première click et que j'arrive à la ligne :

$_SESSION["img1"] = $_SESSION["tblnum"][$j][$i];

est-ce qu'il y a moyen de faire un genre de

$_SESSION["tblnum"][$j][$i].style.visibility="visible"

ce qui voudrait dire de mettre visible l'image caché en 1.1 (par exemple) ?
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
16 mai 2011 à 13:51
Bah pour savoir s'il faut tourner la carte, tu as besoin du serveur php, et pour tourner une carte tu as besoin du javascript
La solution a un nom : AJAX.
En gros tu peux appeler ta fonction dans php, et au lieu de générer une page, tu auras du text en réponse du serveur que tu peux interpréter en javascript et tu peux ainsi faire les modifs dont tu as besoin sans recharger la page.

C'est pas méchant AJAX. Pour écrire une réponse des simples echo suffisent (je crois, je l'ai fait en ASP avec l’équivalent qui est Response.Write)


	var httpRequest = null;
if(window.XMLHttpRequest) { // Mozilla, Safari, Firefox ...
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {
httpRequest.overrideMimeType('text/xml');
}
}else if (window.ActiveXObject) { // IE
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}

Là tu as httpRequest pour interroger le serveur.

Ensuite tu dis quoi faire quand il répond et tu l'appelles :

	httpRequest.onreadystatechange = function()
{
if(httpRequest.readyState 4 && httpRequest.status 200)
{
//La réponse du serveur est dispo après une exécution réussie
}
}		

httpRequest.open('GET', 'recherche.asp?f=CreerEmploiDuTemps&date='+document.getElementById("dateAffiche").value, true);
httpRequest.send(null);	


Et voila, t'as tout là ! En passant les parametres par GET. On peut faire avec POST aussi, mais là l'utilisateur ne voit rien donc pas forcément la peine.
Et le tuto que j'ai lu en découvrant AJAX la semaine dernière : http://www.xul.fr/xml-ajax.html
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
16 mai 2011 à 13:52
J'espère qu'on pourra y jouer à ce memory un jour
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Varkan Messages postés 27 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 17 mai 2011
16 mai 2011 à 14:14
Salut smathis, merci pour t'être donnée de la peine à me répondre :)

Mais je préfèrerais utiliser du php et du js.

Ce projet à une certaine importance et on va m'interroger là-dessus, donc je préfère être serein avec du code que je connais.
0
Varkan Messages postés 27 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 17 mai 2011
16 mai 2011 à 14:34
Et si je fait un appelle dans mon test comme ça :

swap(); ?

Le problème c'est que j'ai besoin de l'objet <td> comme j'utilise le "this" dans mon onclick...

y a moyen de faire un genre d'appelle swap(prendre collection d'objet td) ?
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
16 mai 2011 à 16:13
L'objet TD tu peux toujours lui mettre un id genre id="td_xy" et accéder ou modifier le contenu avec innerHTML.
Mais l'AJAX c'est du js et du php :)
L'AJAX c'est juste un nom, mais au final c'est du javascript (pour appeler et traiter la réponse) qui appelle un fichier php sur le serveur et récupère le traitement. Et tu passes les paramètres en GET comme sur un vrai formulaire.

httpRequest.open('GET', 'recherche.asp?f=CreerEmploiDuTemps&date='+document.getElementById("dateAffiche").value, true);


Ca peut te permettre de valider des info sans recharger la page. Un peu comme les modules de sondage et vote, ça envoie un message au serveur et t'as pas besoin de recharger ta page.
Et le premier bout de code de mon dernier message, c'est rien. C'est juste instancié l'élément qui permet de communiquer en fonction du navigateur, en atendant que IE soit interdit
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
16 mai 2011 à 16:16
Les projets sont fait pour découvrir de nouvelle choses !
Regarde pas les et , je voulais mettre en gras mais dans les balises code ça va pas bien ^^'
0
Varkan Messages postés 27 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 17 mai 2011
16 mai 2011 à 16:22
Bon là je rentre chez moi, je vais voir ce que ça donne, je sais que les projets sont là pour apprendre de nouvelle chose, mais là mon CFC est en jeu ^^

Pour les français je sais pas trop ce que c'est mais c'est un papier comme quoi je suis informaticien blablabla et que je peux travailler avec un salaire minimum.

Donc j'ai peur d'utiliser tout ça.
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
16 mai 2011 à 16:37
Bah c'est une solution pour même coté client pouvoir utiliser ta base de données, tes variables de session etc.
Essaye déjà simplement de faire la communication sans parametre sans un fichier à part, et il t'ecrit echo "hello" et t'essaye de le mettre dans un alert, et après ça ira tout seul.
0
Varkan Messages postés 27 Date d'inscription mardi 9 juin 2009 Statut Membre Dernière intervention 17 mai 2011
17 mai 2011 à 07:21
J'ai essayé mais impossible de faire fonctionner ce code... rhaaa
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
17 mai 2011 à 10:13
Le problème doit être du coté php.
Appelles une page php qui est vide, comme ça aucun problème d’exécution et il devrait entrer la dedans :
	httpRequest.onreadystatechange = function()
{
if(httpRequest.readyState 4 && httpRequest.status 200)
{
alert("C'est beau AJAX.");
}
}
0
Rejoignez-nous