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 :

[Débutant] bouton de souris


Sujet :

JavaScript

  1. #1
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 44
    Points
    44
    Par défaut [Débutant] bouton de souris
    Bonjour à tous,

    Désolé de poser une question si basique, mais j'ai cherché des exemples un peu partout et il doit y avoir quelque chose de tout bête qui m'échappe...

    Je voudrais quand on clique sur une image faire telle ou telle action selon le bouton de la souris.
    En résumé, mon code HTML ressemble à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img id='mon_id' src='monimage.gif' onmousedown=mafonction()>
    Quand je clique sur l'image, mafonction s'exécute bien. Seulement, je voudrais savoir quel bouton a été utilisé et c'est là qu'il doit me manquer quelque chose. J'utilise event ou plutôt essaie d'utiliser event.
    Ma fonction ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function mafonction(){
       monimage = document.getElementById('mon_id');
       bouton = monimage.event.button; //plante car monimage.event est "undefined"
     
    }
    J'ai essayé d'utiliser event sans monimage avant, mais plantage direct.
    J'ai même essayé document.event, mais "undefined" aussi...

    Encore une fois, désolé de poser une question si basique, mais ca m'échappe... Merci d'avance...

  2. #2
    Membre actif Avatar de k1rby
    Profil pro
    Développeur Web
    Inscrit en
    Novembre 2008
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2008
    Messages : 181
    Points : 219
    Points
    219
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <img src="http://www.absoluteanime.com/kirby/cook_kirby.gif" alt="kirby" id="img" />
     
    <script type="text/javascript">
    function mafonction(e){
    	if ((!document.all && e.which==3) || (document.all && event.button==2)){
    		//code pour le clic droit
    	}
    }
    document.getElementById('img').onmousedown=mafonction;
    Marche sous IE, FF, Safari, Chrome mais pas Opera

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Voir : https://developer.mozilla.org/en/DOM/event.button

    Because mouse clicks are frequently intercepted by the user interface, it may be difficult to detect buttons other than those for a standard mouse click (usually the left button) in some circumstances.

    Users may change the configuration of buttons on their pointing device so that if an event's button property is zero, it may not have been caused by the button that is physically left–most on the pointing device; however, it should behave as if the left button was clicked in the standard button layout.

  4. #4
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Bonsoir,

    Comme te le fait remarquer k1rby le souci principal vient déjà du fait que les navigateurs ne gèrent pas tous de la même façon les événements.
    Ainsi la norme veut que si un événement est déclenché alors la fonction associée appelée se voit passer comme paramètre un objet Event. Or IE procède autrement: il dispose aussi d'un objet Event mais directement comme une propriété de l'objet window... Ce qui impose de faire le distingo et de l'inclure lors de l'écriture du code (javascript ou HTML). Ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img id='mon_id' src='monimage.gif' onmousedown=mafonction()>
    devra s'écrire ainsi si on veut accepter les différentes interprétations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Note les guillemets autour de l'appel de la fonction
    <img id="mon_id" src="monimage.gif" onmousedown="mafonction(event);" />
    Maintenant ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function mafonction(){
       monimage = document.getElementById('mon_id');
       bouton = monimage.event.button; 
     
    }
    D'après ce qu'on vient de voir, il faut changer l'appel et distinguer si c'est le modèle de IE ou du W3C qui s'applique . Note que mafonction est appelée depuis l'enfoncement du bouton, donc il n'y a pas besoin de repartir de monimage pour avoir les informations qui nous intéressent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function mafonction(e){
      //code qui permet d'obtenir e comme un event commun à tous les navigateurs
      //peut aussi s'écrire ainsi: 
      //var e = e || window.event;
    
       if (!e) var e = window.event;
       
       //si tu veux le clic droit
       if (e.button==2){
          //code pour le clic droit 
          alert('clic droit');
       }
    }
    Concernant les "numéros" des boutons, là encore c'est un peu l'anarchie:
    - IE: 0 = pas de bouton, 1 = gauche, 2 = droit, 4 = milieu, puis combinaison de ces valeurs (ex: 5 = gauche + milieu)
    - W3C (Firefox, Safari, Opera > 8b): 0 = gauche , 1 = milieu, 2 = droit
    - Opera <8b: 1 = gauche , 2 = droit, 3 = milieu

    Enfin toujours comme te le fait remarquer k1rby, un code alternatif pour associer l'événement peut être celui-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <img src="http://www.absoluteanime.com/kirby/cook_kirby.gif" alt="kirby" id="mon_id" />
    <script type="text/javascript">
      function mafonction(e){
        if (!e) var e = window.event;
        if (e.button==2){
           //code pour le clic droit
           alert('clic droit');
        }
    }
     
    document.getElementById('mon_id').onmousedown=mafonction;
     
    </script>
    Bon dev,

    ERE

  5. #5
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 54
    Points : 44
    Points
    44
    Par défaut
    Merci à tous, j'ai corrigé l'appel de ma fonction en ajoutant event en argument, et ca marche tout de suite mieux. Il ne me reste plus qu'à gérer pour IE.
    Sinon, quand je fais mon clic droit, le menu contextuel apparait, je vais chercher comment le neutraliser.
    En tout cas, encore merci !

  6. #6
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Citation Envoyé par bourinator Voir le message
    Sinon, quand je fais mon clic droit, le menu contextuel apparait, je vais chercher comment le neutraliser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    element.oncontextmenu = function() {
           return false;
        }
    ERE

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

Discussions similaires

  1. [débutant] bouton et fonction
    Par lietof dans le forum ASP
    Réponses: 2
    Dernier message: 21/04/2006, 09h04
  2. [Souris] Associer un bouton de souris
    Par GLDavid dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 26/01/2006, 09h44
  3. [JTextArea] bouton gauche souris
    Par let_me_in dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 05/01/2006, 17h48
  4. [débutant] utiliser la souris
    Par hyp dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 03/11/2005, 15h36
  5. Réponses: 4
    Dernier message: 18/01/2005, 18h49

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