IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Mise en oeuvre onClick sur TABLE


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 17
    Points : 9
    Points
    9
    Par défaut Mise en oeuvre onClick sur TABLE
    Bonjour,
    J'ai le code suivant pour un tableau :


    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
         <link rel="stylesheet" href="Grilles2.css" media="all" type="text/css" />
    </head>
     
    <body>
    <TABLE id="Table1">
    	<TR>
    		<TD id="C01">1</TD>
    		<TD id="C02">2</TD>
    		<TD id="C03">3</TD>
    	</TR>
    	<TR>
    		<TD id="C11">4</TD>
    		<TD id="C12">5</TD>
    		<TD id="C13">6</TD>
    	</TR>
    </TABLE>
     
    </body>
    </html>


    J'aimerai de l'aide pour un script JavaScript permettant :
    • en cliquant une première fois dans une cellule, d'afficher dans cette cellule "Vrai"
    • en cliquant une deuxième fois dans cette cellule, d'afficher dans cette cellule "Faux"
    • en cliquant une troisième fois dans cette même cellule, de vider le contenu de la cellule

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Essaie ça.

    Cerise sur le gâteau si tu cliques sur la cellule vide ça remet la valeur d'origine.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <!DOCTYPE html>
     <html  xml:lang="fr" lang="fr">
     <head>
     <link rel="stylesheet" href="Grilles2.css" media="all" type="text/css" />
     <script>
     function change(unId) {
     if (! unId.getAttribute('mem')) {
      unId.setAttribute('mem',unId.innerHTML);
      unId.innerHTML = 'vrai';
     } else {
      if (unId.innerHTML == 'vrai') {
       unId.innerHTML = 'faux';
      } else {
       if (unId.innerHTML == 'faux') {
        unId.innerHTML = '';
       } else {
        if (unId.innerHTML == '') {
        
         unId.innerHTML = unId.getAttribute('mem');
         unId.removeAttribute('mem');
        }
       }
      }
     
     }
     }
     </script>
     </head>
     <body>
     <TABLE id="Table1" border='1'>
     <TR>
     <TD >Colonne 1</TD>
     <TD >Colonne 2</TD>
     <TD >Colonne 3</TD>
     </TR> 
     <TR>
     <TD id="C01" onclick="change(this)">1</TD>
     <TD id="C02" onclick="change(this)">2</TD>
     <TD id="C03" onclick="change(this)">3</TD>
     </TR>
     <TR>
     <TD id="C11" onclick="change(this)">4</TD>
     <TD id="C12" onclick="change(this)">5</TD>
     <TD id="C13" onclick="change(this)">6</TD>
     </TR>
     </TABLE>
     </body>
     </html>

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 228
    Points : 101
    Points
    101
    Par défaut
    Voici une autre façon de faire avec du Jquery et un compteur

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <!doctype html>
    <html lang="fr">
    <head>
      <meta charset="utf-8">
      <title></title>
     
      </head>
     
    <body>
    	<TABLE id="Table1">
    		<TR>
    			<TD id="C01">1</TD>
    			<TD id="C02">2</TD>
    			<TD id="C03">3</TD>
    		</TR>
    	<TR>
    		<TD id="C11">4</TD>
    		<TD id="C12">5</TD>
    		<TD id="C13">6</TD>
    	</TR>
    	</TABLE>
     
     
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
     
     
        <script>
            $(document).ready(function(){
                    $('#Table1 td').each(function(){
                            var count = 0,
                                    $that = $(this);
                            $that.on('click', function(){
                                    if(count === 0){
                                            $that.html('Vrai');
                                            count++;
                                    }else if (count === 1){
                                            $that.html('Faux');
                                            count++;
                                    }else{
                                            $that.html('');
                                    }
                            });
                    });
            });
     
      </script>
     
    </body>
    </html>

    Sylvain

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 079
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 079
    Points : 44 662
    Points
    44 662
    Par défaut
    Bonjour,
    c'est typiquement un cas où l'utilisation de la délégation d'événement prend tout son sens.

    Comprendre la délégation...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup orphen
    Cela correspond bien à ma demande et fonctionne
    Un petit souci toutefois (si ce n'est pas abuser) :
    lorsque par erreur je clic plus de 3 fois sur une cellule je ne peux plus y revenir pour la remplir
    En espérant une solution, j'attends pour classer en résolu
    Merci encore

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Merci NoSmoking
    Je vais voir ça

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Pour orphen
    Autant pour moi il suffit d'ajouter count = 0; à la fin du second else
    Je marque le sujet comme résolu
    Merci encore
    Bon Week End

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Merci badaze
    Cela ne fonctionne qu'en ajoutant avant la ligne 4 :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

  9. #9
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Non. Je n'utilise pas jQuery.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Pour badaze
    Bien mais j'aimerai comprendre pourquoi, chez moi cela ne fonctionne pas sans cette modification.
    Autres choses :
    comment faire pour que cela ne fonctionne pas sur les titres de colonne
    ni sur certaines cellules (certains id=)
    Merci de ton attention

  11. #11
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Pour les titre des colonnes, tu peux utiliser la balise th au lieu de td.

    Pour l'exclusion ou plutôt la sélection tu peux faire comme suit :

    Reprise du code fourni par @orphen. Le click ne fonctionne que sur les cellules dont l'id commence par C.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    <!doctype html>
    <html lang="fr">
    <head>
      <meta charset="utf-8">
      <title></title>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
      </head>
     
    <body>
     <TABLE id="Table1">
     <TR>
      <TD id="C01">1</TD>
      <TD id="C02">2</TD>
      <TD id="C03">3</TD>
     </TR>
     <TR>
      <TD id="C11">4</TD>
      <TD id="C12">5</TD>
      <TD id="C13">6</TD>
     </TR>
     <TR>
      <TD id="D11">7</TD>
      <TD id="D12">8</TD>
      <TD id="D13">9</TD>
     </TR> 
     </TABLE>
     
        <script>
            $(document).ready(function(){
                    $('#Table1 td[id^="C"]').each(function(){
                            var count = 0,
                                    $that = $(this);
                            $that.on('click', function(){
                                    if(count === 0){
                                            $that.html('Vrai');
                                            count++;
                                    }else if (count === 1){
                                            $that.html('Faux');
                                            count++;
                                    }else{
                                            $that.html('');
                                    }
                            });
                    });
            });
     
      </script>
     
    </body>
    </html>

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 17
    Points : 9
    Points
    9
    Par défaut
    Exactement ce que je voulais obtenir

    Pour ceux qui auraient le même problème :
    dans le dernier code de badaze, remplacer la ligne 7 par
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    Je ne sais toujours pas pourquoi (ne me laissez pas mourir idiot), mais chez moi cela permet d'obtenir le résultat espéré


    Mille merci à orphen et badaze

  13. #13
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    J'ai compris. C'est le forum qui réécrit les url.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. du bon usage de ONCLICK
    Par devboy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/05/2007, 15h52
  2. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  3. Un Sender peut-il s'auto-détruire lors d'un onClick?
    Par Flo. dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/07/2002, 10h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo