Accèder à une cellule en cliquant sur un lien dans celle ci, mais celui ci a un

cs_kalamity Messages postés 4 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 12 décembre 2008 - 11 déc. 2008 à 18:00
cs_kalamity Messages postés 4 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 12 décembre 2008 - 12 déc. 2008 à 00:48
Bonjour,

J'aurais besoin de l'aide de développeur en javascript.

J'ai créé un tableau en HTML contenant X lignes et Y colonnes.
Chaque cellule contient un lien.
Je désire que l'utilisateur puisse cliquer sur une zone vide de la cellule ou sur le lien, d'où l'utilisation du style 'display:block' pour chaque lien.

je veux ensuite que quand l'utilisateur clique sur une cellule, une fonction javascript se déclenche et fait diverses actions dont changer le style de cette cellule.

Avec une fonction javascript que je vais vous fournir, tout fonctionne si je retire le style 'display:block' de mes liens ... mais j'en ai besoin.

je pense qu'il faudrait pouvoir déterminer en javascript "l'identité" de la cellule qui contient mon lien...

Pourriez vous m'indiquer une solution ?

merci !

Voici mon code :

<HTML>
<HEAD>
<style type="text/css">

    .dosel table    { border:0px; width:450px;  }
    .dosel td       { text-align: center; width:140     }
    .dosel td.sel   { background-color: #F0F0FF; cursor:pointer;  }
    .dosel td.nosel { background-color: #F8F8F8;   }
    .dosel tfoot    { font-style: italic; font-size: 12px; font-color: #ccc;    }
    .dosel a        { display:block; text-decoration: none; }

     

     
</style>

<script type="text/javascript">

function change_style(event)
{

var dosel=document.getElementById("dosel");
event = event || window.event;
var nCell = event.target || event.srcElement;
var colid = nCell.cellIndex;
var rowid = nCell.parentNode;
while(rowid.tagName!='TR') rowid = rowid.parentNode;
rowid = rowid.rowIndex ;

        if (dosel.rows[rowid].cells[colid].className == "nosel")
        {
            dosel.rows[rowid].cells[colid].className="sel";
        }
        else
        {
            dosel.rows[rowid].cells[colid].className="nosel";
        }
   
    //Puis je ferais d'autres actions ici
   
}

function init()
{
document.getElementById("dosel").onclick = change_style;
}

window.onload = init;

</script>
</HEAD>

            ----

                            Stressé
           ,
                            Timide
           ,
                            Bavard
           ,
       
        ----

                            Amical
           ,
                            Gentil
           ,
                            Disponible
           ,
       
        <tfoot>
            ----

                                    Vous pouvez sélectionner un ou plusieurs mots.Vous pouvez aussi déselectionner un mot.Vous ne pouvez pas déselectionner un mot pour lequel vous avez déjà voté
               ,
           
        </tfoot>
   

       
       

</html>

6 réponses

PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
11 déc. 2008 à 21:56
Bonjour,
J'ai l'impression que tu te compliques la
vie, je m'explique...
ta fonction change_style récupére l'événement produit

event = event ||
window.event;
et tu en récupéres l'auteur
var nCell = event.target ||
event.srcElement;
dans ce cas pourquoi ne pas tester si il s'agit
d'une TD
SI OUI alors tu swap le style
SI NON alors tu prend le parentNode
et ainsi de suite...

;O)
0
cs_kalamity Messages postés 4 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 12 décembre 2008
11 déc. 2008 à 22:10
merci pour ta réponse.

et bien avec ce code (que j'ai récupéré à droite à gauche ^^), j'obtiens une erreur car apparemment je ne clique pas sur un td mais sur un lien qui prend toute la cellule.

Donc j'ai essayé de remplacé la ligne :

var nCell = event.target || event.srcElement;

par ces deux là :

var nLien = event.target || event.srcElement;
var nCell = nlien.parentNode;

en me disant que le ParentNode du lien devait être la cellule dans laquelle il se trouve.
Mais j'obtiens une erreur sur la 2° de ces lignes : "Nlien n'est pas défini"

Tu vois le problème ?

(je précise que je suis un néophyte du javascript ... disons que j'en avais pas fait depuis des années)
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
11 déc. 2008 à 22:16
<table bgcolor="#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">

----,

disons que j'en avais pas fait depuis des
années

</td>

</td>
</tr>
</tbody>
</table>c'est comme
le vélo cela ne s'oubli pas !

var nCell = event.target || event.srcElement;
nCell ou plus
exactement l'Objet qui a déclenché l'événement peut être tout ce qui se trouve
dans le DIV conteneur, la TABLE, la TR etc...jusqu'au lien A de la cellule...

donc il te faut le tester comme je te l'ai indiqué ci dessus
;O)
0
cs_kalamity Messages postés 4 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 12 décembre 2008
11 déc. 2008 à 22:31
Ben écoute j'allais te répondre obstinement que ça ne pouvait pas marcher parce que j'avais dféjà testé ... mais j'ai retesté en ça fonctionne ! merci :)

    var nCell = event.target || event.srcElement;
    if (nCell.tagName=='A')
    {
        var nCell = nCell.parentNode;
        var colid = nCell.cellIndex;
        var rowid = nCell.parentNode;
        while(rowid.tagName!='TR') rowid = rowid.parentNode;
        rowid = rowid.rowIndex ;
       ....
   }

Bonne soirée !
0

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

Posez votre question
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
11 déc. 2008 à 22:43
perso j'aurais fait un truc du style
//--------------------------
function
change_style(event){
  //-- Recup evenement

  event = event || window.event;
   //-- Recup objet declencheur
  var Obj =
event.target || event.srcElement;
  //-- tant que ce
n'est pas une TD
  while( Obj.tagName != 'TD'){
     //-- Recup le parent
    Obj = Obj.parentNode;

    //-- Si parent nul on quitte, exemple click sur
la bordure de la table
    if( !Obj) return();
  }

  //-- Swap la className
  if(
Obj.className == "sel")
    Obj.className = "nosel"
  else

   Obj.className = "sel";
  return();
}
qui me paraît
plus simple...me semble t-il !

;O)
0
cs_kalamity Messages postés 4 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 12 décembre 2008
12 déc. 2008 à 00:48
oui je vais tester ça. Effectivement, si je peux accèder directement à la classe de la cellule sans avoir à préciser quelle cellule (ligne, colonne), c bien mieux.

En tous cas merci.

Ce code est en fait pour un appli facebook.
Dans une simple page html en local il fonctionne, mais sur facebook, après avoir adapté les fonctions javascript en FBJS, je n'ai aucune réaction .... aurait tu déjà programmé sur facebook avec leur JBJS par hasard ?

Merci !
0
Rejoignez-nous