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 :

La méthode initMouseEvent(..), besoin de détails


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut La méthode initMouseEvent(..), besoin de détails
    Bonjour à tous,

    Je me suis intéressé à DOM, et en particulier à la méthode "event.initMouseEvent":
    initMouseEvent( 'type', bubbles, cancelable, windowObject, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget )

    Un essai fait dans une page avec une checkbox par exemple fonctionne très bien.

    Mais je m'interroge sur l'utilisation de screenX et screenY. En effet, la description laisse supposer qu'un clic peut être fait de manière indépendante des élements de la page, juste en fournissant les coordonnées: on peut donc faire un click sur un point (100px,100px), quel que soit ce qui se trouve dessous.

    Sauf que le déclenchement se fait par la méthode "dispatchEvent()" qui elle, si j'ai bien compris, est forcement rattachée à un objet du document (bouton, checkbox, ...).

    Donc, si j'ai un document quelconque, et que je souhaite simuler un clic au point (100px,100px,), à quoi dois-je attacher le "dispatchEvent" ?

    Voici un essai avec une attache sur le document, mais ça marche pô ...
    Code : 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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html dir="ltr" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
     
    <script type="text/javascript">
    function simulateClick() {
      var evt = document.createEvent("MouseEvents");
      evt.initMouseEvent("click", true, true, document,
        1, 100, 100, 0, 0, false, false, false, false, 0, null);
      var cb = document.dispatchEvent(evt);
    }
    function testClick() {
    	alert("ok");
    }
    </script>
     
    </head><body>
    <input onclick="testClick();" value="test" type="button" style="width:300px;height:300px">
    <input onclick="simulateClick();" value="Simulate click" type="button">
    </body></html>


    Merci de votre attention,
    Openmind

  2. #2
    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
    Salut,
    Il faut bien comprendre que lorsque tu simules un événement avec InitEvent (ou InitMouseEvent dans ton cas), tu dois bien fournir à l'objet Event les paramètres dont il a besoin, d'où cette série de paramètres qui permettent à ton navigateur (attention, cette méthode n'est pas valable avec IE) de gérer correctement l'événement.
    Donc les paramètres envoyés sont ceux qui vont permettre d'implémenter l'objet Event.
    Dans l'exemple que tu donnes, il faut bien différencié l'événement que tu veux simuler (le click sur un élément) et les paramètres avec lesquels tu vas le simuler. Tu peux donc faire croire qu'il y a eu un clic sur un input de coordonnées 100px / 100px sans que cet élément n'y soit vraiment présent

    Donc pour répondre à la question, tu dois attacher le dispatchEvent à l'élément pour lequel tu as défini un écouteur, même si cet élément n'est pas présent à l'emplacement que tu décris !

    EDIT : Selon moi, la raison pour laquelle ton exemple ne fonctionne pas est qu'il n'y a aucun lien entre un onclick et un addEventListener('click') !
    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

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Février 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 77
    Par défaut
    Bonjour,

    Comme il est dit dans la FAQ Ici il faut définir une cible pour ton évènement.
    Donc donne un id à ton input
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input id='test' onclick="testClick();" value="test" type="button" style="width:300px;height:300px"/>
    Et appelle le dans ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function simulateClick() {
      var cb = document.getElementById('test');
      var evt = document.createEvent("MouseEvents");
      evt.initMouseEvent("click", true, true, window,
        1, 100, 100, 0, 0, false, false, false, false, 0, cb);
      cb.dispatchEvent(evt);
    }

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut
    Wow, ça c'est de l'efficacité!

    Je regarde ça ce soir, et je vous dit si ça fonctionne.

    Openmind

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 5
    Par défaut
    Re-bonjour,

    malheureusement, ça ne fonctionne pas ... Le fait de rajouter une cible déclenche l'évenement sur cette cible, quelles que soient les coordonnées fournies.

    par exemple:
    Code : 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 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html dir="ltr" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
     
    <script type="text/javascript">
    function simulateClick() {
      alert("ok");
      var cb = document.getElementById("simulate")
      var evt = document.createEvent("MouseEvents");
      evt.initMouseEvent("click", true, true, window,
        1, 100, 100, 0, 0, false, false, false, false, 0, null);
      cb.dispatchEvent(evt);
    }
    function testClick() {
    	alert("test");
    }
    </script>
     
    </head><body>
    <input id="test" onclick="testClick();" value="test" type="button" style="width:300px;height:300px">
    <input id="simulate" onclick="simulateClick();" value="Simulate click" type="button">
    </body></html>
    affiche en boucle le message "ok".

    Dommage, je continue à chercher.

    Openmind

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Février 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 77
    Par défaut
    Quand je parlais de cible, je parlais du bouton test.
    Code : 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 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html dir="ltr" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
     
    <script type="text/javascript">
    function simulateClick() {
      var cb = document.getElementById("test")
      var evt = document.createEvent("MouseEvents");
      evt.initMouseEvent("click", true, true, window,
        1, 100, 100, 0, 0, false, false, false, false, 0, null);
      cb.dispatchEvent(evt);
    }
    function testClick() {
    	alert("test");
    }
    </script>
     
    </head><body>
    <input id="test" onclick="testClick();" value="test" type="button" style="width:300px;height:300px">
    <input id="simulate" onclick="simulateClick();" value="Simulate click" type="button">
    </body></html>

Discussions similaires

  1. [Oracle] transaction, connection persistante : besoin de détails
    Par Grummfy dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 21/05/2012, 14h47
  2. WebException 401 : besoin de détail
    Par safisafi dans le forum VB.NET
    Réponses: 2
    Dernier message: 13/08/2010, 11h37
  3. Besoin de détails sur le concept d'ESB
    Par RudyWI dans le forum Services Web
    Réponses: 7
    Dernier message: 26/06/2009, 15h37
  4. [HLSL] besoin de détails sur tex2D
    Par ijk-ref dans le forum DirectX
    Réponses: 5
    Dernier message: 28/08/2008, 13h56
  5. Table mutante : besoin de détails supplémentaires
    Par tchoimars dans le forum SQL
    Réponses: 1
    Dernier message: 09/07/2007, 16h02

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