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

jQuery Discussion :

onclick sur td se déclenche deux fois


Sujet :

jQuery

  1. #1
    Membre éclairé Avatar de Dark Ryus
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 333
    Par défaut onclick sur td se déclenche deux fois
    bonjour,

    voila un bout de code tout simple :
    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
    <div id="test" onclick="$('#txtid').val($('#txtid').val() + 'test/');">
        <table>
            <tr class="montr">
                <td class="montd" id="tdid" onclick="$('#txtid').val($('#txtid').val() + 'toto/');">toto</td>
            </tr>
            <tr>
                <td>titi</td>
            </tr>
            <tr>
                <td>tutu</td>
            </tr>
        </table>
    </div>
    <input id="txtid" />

    Si je passe le script $("#tdid").click(), le résultat sera dans mon input toto/test/test/.

    Le onclick de la DIV se déclenche 2 fois, pourquoi ?

    j'utilise la version 1.9.0 de jquery. J'ai essayé avec une 1.6.0, c'est le même effet.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 101
    Par défaut
    Je n'irais pas jusqu'à dire que c'est un bug de jQuery, mais c'est bizarre.

    En tout cas j'ai testé avec du code JS pur (voir MouseEvent) et le problème ne se produit pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var click = new MouseEvent("click", {
      canBubble: true,
      cancelable: true,
      view: window,
    });
    document.getElementById("tdid").dispatchEvent(click);
    Et ça ne se produit pas avec jQuery quand tu remplaces les attributs onclick par des $("...").click(...).

    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
    <!DOCTYPE html>
    <html lang=fr>
    <head>
      <meta charset=utf-8>
      <title>Bouillonnement bizarre avec jQuery</title>
      <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
      <script> 'use strict';
      
      $(document).ready(function() {
      
        $("#test").click(function() {
          $('#txtid').val($('#txtid').val() + 'test/');
        });
        
        $("#tdid").click(function() {
          $('#txtid').val($('#txtid').val() + 'toto/');
        });
        
      });
      
      </script>
    </head>
    <body>
     
    <!-- <div id="test" onclick="$('#txtid').val($('#txtid').val() + 'test/');"> -->
    <div id="test">
        <table>
            <tr class="montr">
                <!-- <td class="montd" id="tdid" onclick="$('#txtid').val($('#txtid').val() + 'toto/');">toto</td> -->
                <td class="montd" id="tdid">toto</td>
            </tr>
            <tr>
                <td>titi</td>
            </tr>
            <tr>
                <td>tutu</td>
            </tr>
        </table>
    </div>
    <input id="txtid" />
     
    </body>
    </html>
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre chevronné Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Par défaut
    Slt,
    je pense que l'evt onclick est intercepté sur ta div vu que ta div englobe ton table (regarde du coté de la propagation des evts en js)...
    A quoi sert le onclick de ta div??

    ++

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $( "td" ).click(function( e ) {
    e.stopPropagation();
     
    });
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre éclairé Avatar de Dark Ryus
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 333
    Par défaut
    Justement je veux que les 2 événements se déclenchent, pas seulement le TD.

    Mon problème c'est que le onclick de la DIV se déclenche 2 fois au lieux d'une seule.

    Je ne peux pas utiliser le ready() avec l'événement click() dans le bout de code sur lequel je travail.

    J'ai posté aussi sur le forum de JQuery en espérant avoir une explication.

    Je vais continuer à réfléchir à une autre solution et je vais étudier vos propositions.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    je n'ai a priori pas de double click sur le div ...
    http://jsfiddle.net/fh67605y/
    ton souci doit provenir d'un autre bout de code ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre éclairé Avatar de Dark Ryus
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 333
    Par défaut
    je suis d'accord avec ton bout de code présent sur ton lien, en passant par un "on" sur les event click, on n'a pas de problème.

    Je n'ai le problème que dans le cas précis de mon exemple, on mettant le "onclick" sur les éléments et en appelant $("#tdid").click() avec la console (je n'utilise pas la souris pour cliquer sur le td, je le déclenche par le code).

    Cela ne vient pas d'un autre bout de code car j'ai testé sur une page vierge, sans autres bout de code.

    "Watilin" sur le 2ème POST constate le même problème que moi.

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    je le déclenche par le code
    Pas dans le code que tu nous montres en tout cas ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Membre éclairé Avatar de Dark Ryus
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 333
    Par défaut
    oui dans mon exemple je passe par la console, ce qui donne le même résultat.

    je continue de chercher une autre solution que de passer par une fonction() comme dans vos réponses car le code déjà existant dans mon site est déjà très lourd et j'aimerai éviter de tout refaire.

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Pourquoi tu n'utilises pas une balise <script> tout simplement ?
    C'est sûr qu'au milieu du HTML, c'est pas le plus propre, mais si t'as pas le choix, ça fonctionne quand même.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  11. #11
    Membre éclairé Avatar de Dark Ryus
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 333
    Par défaut
    Pour éviter de tout casser, j'ai externaliser le onclick de la DIV comme dans vos exemples et j'ai gardé le onclick sur mon TD.

    Cela fonctionne.

    Merci pour votre aide.

    NB: Je ne comprend toujours pas pourquoi l'onclick sur la div était déclenché 2 fois, bug ?

  12. #12
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 101
    Par défaut
    Citation Envoyé par Dark Ryus Voir le message
    Je ne peux pas utiliser le ready() avec l'événement click() dans le bout de code sur lequel je travail.
    Pour quelle raison tu ne peux pas ? Que tu n'aies pas accès au code serveur, d'accord, mais sur la partie client tu devrais au moins avoir le droit de modifier une page entière. Dis à ton patron / chef de projet / client qu'il doit t'accorder plus de confiance

    Citation Envoyé par Dark Ryus Voir le message
    je continue de chercher une autre solution que de passer par une fonction() comme dans vos réponses car le code déjà existant dans mon site est déjà très lourd et j'aimerai éviter de tout refaire.
    En faisant comme on t'a montré, le code ne sera peut-être pas plus léger, mais il sera plus clair : pas de mélange de codes, pas de problèmes de coloration syntaxique et pas de problèmes de guillemets ; et surtout il sera centralisé, ce qui rendra son évolution beaucoup plus facile. Crois-moi, le plus tôt sera le mieux.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  13. #13
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2016
    Messages : 11
    Par défaut Double balise <script></script>
    Hello !!

    Je rencontrais la même erreur, jusqu'à ce que je me rende compte qu'en fait, j'appelais deux fois mon fichier javascript dans le html et que c'est ça qui me faisait tourner toutes mes fonctions javascript deux fois ...

    Bon courage à tous,

    Lenahic

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/05/2015, 10h18
  2. Empêcher l'appui sur la même touche deux fois
    Par Devilju69 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/07/2014, 10h33
  3. Réponses: 6
    Dernier message: 20/02/2014, 15h56
  4. Réponses: 4
    Dernier message: 11/09/2007, 09h20
  5. onclick sur deux éléments superposés et IE6
    Par sovitec dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/12/2005, 13h56

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